<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springboot"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- mapper的位置 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace和dao接口对应 -->
<mapper namespace="com.my.mybatis.dao.UserDao">
<select id="selectAll" resultType="com.my.mybatis.pojo.User">
select * from tb_user
</select>
</mapper>
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`age` int NOT NULL,
`class_id` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3;
-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `tb_user` VALUES (‘1‘, ‘tom‘, ‘20‘, ‘2‘);
INSERT INTO `tb_user` VALUES (‘2‘, ‘bob‘, ‘30‘, ‘2‘);
INSERT INTO `tb_user` VALUES (‘3‘, ‘alice‘, ‘40‘, ‘4‘);
INSERT INTO `tb_user` VALUES (‘4‘, ‘sir‘, ‘50‘, ‘4‘);
INSERT INTO `tb_user` VALUES (‘5‘, ‘one‘, ‘19‘, ‘5‘);
INSERT INTO `tb_user` VALUES (‘6‘, ‘two‘, ‘20‘, ‘6‘);
INSERT INTO `tb_user` VALUES (‘7‘, ‘three‘, ‘30‘, ‘7‘);
INSERT INTO `tb_user` VALUES (‘8‘, ‘z‘, ‘10‘, ‘8‘);
public class User {
private Integer id;
private String name;
private Integer age;
}
public interface UserDao {
List<User> selectAll();
}
public class MybatisTest {
@Test
public void test01() {
// 加载mybatis配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
//创建SqlSessionFactory对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> users = userDao.selectAll();
users.forEach(System.out::println);
}catch (SqlSessionException e) {
e.printStackTrace();
}finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
<!-- 多个环境时,使用default定义要使用的 environment 的id -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springboot"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/springboot"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
type="[UNPOOLED|POOLED|JNDI]"
。POOLED
的实现类似数据库的连接池。driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/springboot
username=root
password=123456
<configuration>
<!-- 引入properties文件 -->
<properties resource="db.properties" />
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuration>
<configuration>
<!-- 别名定义 -->
<typeAliases>
<!-- 对一个类起别名 -->
<typeAlias type="com.my.mybatis.pojo.User" alias="user" />
<!-- 对该包下所有的类起别名,别名为类名的首字母小写。如,User为User或user,建议使用user。
@Alias("user")可以修改类别名,@Alias("user")只在使用package配置别名时有效。-->
<package name="com.my.mybatis.pojo" />
</typeAliases>
</configuration>
<configuration>
<!-- 告诉mybatis mapper 文件的位置 -->
<mappers>
<mapper resource="mapper/UserDao.xml"/>
<!-- 该用法mapper时mapper文件必须和对应到dao接口在相同的路径,并且和dao接口名相同,
同时只能配置一个mapper和dao的对应关系。-->
<mapper class="com.my.mybatis.dao.UserDao"/>
<!-- 使用package时mapper文件必须和对应到dao接口在相同的路径,切和dao接口名相同 -->
<package name="com.my.mybatis.dao"/>
</mappers>
</configuration>
SqlSessionFactoryBuilder
一旦创建了 SqlSessionFactory
,就不再需要它了。 因此 SqlSessionFactoryBuilder
实例的最佳作用域是方法作用域(也就是局部方法变量)。SqlSessionFactory
一旦被创建就应该在应用的运行期间一直存在。 使用 SqlSessionFactory
的最佳实践是在应用运行期间不要重复创建多次。因此 SqlSessionFactory
的最佳作用域是应用作用域。SqlSession
。如果将SqlSessionFactory
比作数据库连接池,那么SqlSession
相当于数据库连接池中的线程。每个线程都应该有它自己的SqlSession
实例。SqlSession
的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。<mapper namespace="com.my.mybatis.dao.UserDao">
<!-- 使用resultMap进行结果接映射。可以只映射类属性和表列名不同的字段 -->
<resultMap id="User" type="com.my.mybatis.pojo.User">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
<select id="selectAll" resultMap="User">
select * from tb_user
</select>
</mapper>
STDOUT_LOGGING
<configuration>
<settings>
<!-- 标准日志框架,org.apache.ibatis.logging.stdout.StdOutImpl‘,
引入后可以直接使用。-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>>
</configuration>
log4j
的使用
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
log4j.properties
配置### 配置根 ###
log4j.rootLogger = debug,console,file
### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold = debug
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%c]-%m%n
# 文件输出相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
# 将日志输出到当前工程中
log4j.appender.file.File = ./log/mybatis.log
log4j.appender.file.MaxFileSize = 10MB
log4j.appender.file.Threshold = debug
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = [%p][%d{yy-MM-dd}][%c]%m%n
#日志级别
log4j.logger.org.mybatis = debug
log4j.logger.java.sql = debug
log4j.logger.java.sql.Statement = debug
log4j.logger.java.sql.ResultSet = debug
log4j.logger.java.sql.PreparedStatement = debug
mybatis-config.xml
中开启日志处理<configuration>
<settings>
<!-- log4j -->
<setting name="logImpl" value="LOG4J"/>
</settings>
</configuration>
limit 0,2 从第一个数据开始,取两行数据,即第1和2行
的数据。
一般传入前段传入pageNum(第几页)和pageSize(每页大小)
。
转换为limit的算法。limit (pageNum-1)*pageSize, pageSize
。这是简单的计算过程,实际情况需要考虑数据的边界问题。
原文:https://www.cnblogs.com/godistance/p/15024722.html