mybatis简单示例
xml方式构建SqlSessionFactory
开发工具:idea
数据库:mysql
版本管理:maven
项目目录结构:
创建t_role表
DROP TABLE IF EXISTS `t_role`; CREATE TABLE `t_role` ( `id` bigint(40) NOT NULL COMMENT '主键', `role_name` varchar(40) CHARACTER SET utf8 DEFAULT NULL COMMENT '角色名', `note` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
pom.xml
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <!--日志需要--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.30</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency>
mybatis核心配置文件:mybatis-config.xml
<?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">
<!--test1练习使用的mybatis核心配置文件-->
<configuration>
<!-- 定义别名 -->
<typeAliases>
<!--定义别名role,代表了com.lenovo.test1.pojo.Role,这样我们就可以在Mybatis上下文中引用它了-->
<typeAlias type="com.lenovo.pojo.Role" alias="role"/>
</typeAliases>
<!--定义数据库信息,默认使用development数据库构建环境-->
<environments default="development">
<environment id="development">
<!--采用jdbc事务管理-->
<transactionManager type="JDBC"/>
<!--配置数据库链接信息-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mysql?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--配置映射器,这里引入了一个xml,它的作用是提供SQL和SQL对POJO的映射规则定义,它包含了映射器里面的信息。mybatis将解析这个xml,来为我们生成映射器-->
<mappers>
<mapper resource="mapper\RoleMapper.xml" />
</mappers>
</configuration>
日志文件:log4j.properties
log4j.rootLogger=DEBUG,stdout log4j.logger.org.mybatis=DEBUG log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
RoleMapper.xml
<?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"> <mapper namespace="com.lenovo.dao.RoleMapper"> <select id="getRole" parameterType="long" resultType="role"> select id,role_name as roleName,note from t_role where id = #{id} </select> <insert id="insertRole" parameterType="role"> insert into t_role(id,role_name,note)values (#{id},#{roleName},#{note},) </insert> <delete id="deleteRole" parameterType="long"> delete from t_role where id = #{id} </delete> </mapper>
RoleMapper.java
1 package com.lenovo.dao; 2 3 import com.lenovo.pojo.Role; 4 5 public interface RoleMapper { 6 7 //查询单个角色 8 public Role getRole(Long id); 9 10 //新增单个角色 11 public int insertRole(Role role); 12 13 //删除单个角色 14 public int deleteRole(Long id); 15 }
package com.lenovo.pojo; public class Role { private Long id;//主键 private String roleName;//角色名称 private String note;//备注 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } @Override public String toString() { return "Role{" + "id=" + id + ", roleName='" + roleName + '\'' + ", note='" + note + '\'' + '}'; } }
1 package com.lenovo.util; 2 3 import org.apache.ibatis.io.Resources; 4 import org.apache.ibatis.session.SqlSession; 5 import org.apache.ibatis.session.SqlSessionFactory; 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 7 8 import java.io.IOException; 9 import java.io.InputStream; 10 11 public class SqlSessionFactoryUtil { 12 13 //SqlSessionFactory对象 14 private static SqlSessionFactory sqlSessionFactory = null; 15 //类线程锁 16 private static final Class CLASS_LOCK = SqlSessionFactoryUtil.class; 17 18 //私有化构造函数 19 private SqlSessionFactoryUtil(){}; 20 21 //构建SqlSessionFactory 22 public static SqlSessionFactory initSqlSessionFactory(){ 23 String resource = "mybatis-config.xml"; 24 InputStream inputStream = null; 25 try { 26 inputStream = Resources.getResourceAsStream(resource); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 31 synchronized (CLASS_LOCK){ 32 if (sqlSessionFactory == null){ 33 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 34 } 35 } 36 return sqlSessionFactory; 37 } 38 39 //打开SqlSession 40 public static SqlSession openSqlSession(){ 41 if (sqlSessionFactory == null){ 42 initSqlSessionFactory(); 43 } 44 return sqlSessionFactory.openSession(); 45 } 46 47 }
测试类:
1 package com.lenovo; 2 3 import com.lenovo.dao.RoleMapper; 4 import com.lenovo.pojo.Role; 5 import com.lenovo.util.SqlSessionFactoryUtil; 6 import org.apache.ibatis.session.SqlSession; 7 8 /** 9 * Mybatis xml方式构建SqlSessionFactory 10 */ 11 public class MybatisExample { 12 13 public static void main(String[] args) { 14 SqlSession sqlSession = SqlSessionFactoryUtil.initSqlSessionFactory().openSession(); 15 RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); 16 Role role = roleMapper.getRole(1l); 17 System.out.println("role名称===》" + role.getRoleName()); 18 } 19 20 }