mybatis(基础及其搭建)
声明:该文章及该分类中的内容均基于正在开发的项目和一本参考书(深入浅出MyBatis技术原理与实战 by 杨开振)
一、mybatis核心组件(简要介绍)
SqlSessionFactoryBuilder(构造器):根据配置信息或代码生成SqlSessionFactory(工厂接口);
SqlSessionFactory:依靠工厂生成SqlSession(会话);
SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口;主要用途:1.获取映射器,2.直接通过命名信息执行SQL;
SQLMapper:由一个Java接口和XML文件(或注解)构成,需给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
二、构建SqlSessionFactory(开始搭建)
有两种构建方式:1.xml配置;2.代码方式
建议使用XML方式:避免重复编译代码,也方便配置人员修改
简易XML配置:(部分可不配置,按需要进行配置)
mybatis-config.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration><!-- org.apache.ibatis.session.Configuration --> 6 <!-- 属性 --> 7 <properties resource="jdbc.properties"/> 8 <settings/> <!--设置 --> 9 <!-- 类型命名 定义别名--> 10 <typeAliases> 11 <typeAlias alias="role" type="com.standard.model.Role"/> 12 </typeAliases> 13 <typeHandlers/><!--类型处理器 --> 14 <objectFactory/><!-- 对象工厂 --> 15 <plugins/><!--插件 --> 16 <environments default="development"><!-- 配置环境 --> 17 <environment id="development"><!-- 环境变量 --> 18 <transactionManager type="JDBC"><!--采用JDBC 事务管理器 --> 19 <property name="autoCommit" value="false"/> 20 </transactionManager> 21 <!-- 数据源 --> 22 <dataSource type="POOLED"> 23 <property name="driver" value="${driver}"/> 24 <property name="url" value="${url}"/> 25 <property name="username" value="${username}"/> 26 <property name="password" value="${password}"/> 27 </dataSource> 28 </environment> 29 </environments> 30 <databaseIdProvider/><!--数据库厂商标识 --> 31 <mappers><!-- 映射器 --> 32 <mapper resource="com/standard/dao/UserMapper.xml"/> 33 </mappers> 34 </configuration>
注意:
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
下面配置映射器时,这个地方有区别
database在jdbc.properties中读取:
1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/mybatis 3 username=root 4 password=root
注:mybatis的解析程序会将mybatis-config.xml文件配置的信息解析到Configuration类对象里面,然后利用SqlSessionFactoryBuilder读取这个对象为我们创建SqlSessionFactory。
三、创建SqlSession
以下是封装好的工具类,打个util类直接使用
1 public class SqlSessionFactoryUtil { 2 3 //类线程锁 4 private static final Class CLASS_LOCK =SqlSessionFactoryUtil.class; 5 //私有化构造参数 6 //防止使用者使用new的方式创建多个对象 7 private SqlSessionFactoryUtil(){ } 8 9 //构建SqlSessionFactory 实现单例 10 static SqlSessionFactory sqlSessionFactory=null; 11 12 public static SqlSessionFactory initSqlSessionFactory(){ 13 InputStream iStream = null; 14 //sqlSessionFactory对象 15 SqlSession sqlSession=null; 16 17 //读入配置流文件 加载核心配置文件 18 19 try{ 20 iStream=Resources.getResourceAsStream("mybatis-config.xml"); 21 }catch(IOException e){ 22 // TODO Auto-generated catch block 23 System.out.println("--"+e); 24 e.printStackTrace(); 25 } 26 27 synchronized (CLASS_LOCK) {//避免在多线程环境中,多次初始化造成对象的不唯一 28 if(sqlSessionFactory==null){ 29 //获取SQLSessionFactory 30 sqlSessionFactory=new SqlSessionFactoryBuilder().build(iStream); 31 } 32 33 } 34 return sqlSessionFactory; 35 } 36 37 //打开SqlSession 38 public static SqlSession openSqlSession(){ 39 if(sqlSessionFactory==null){ 40 initSqlSessionFactory(); 41 } 42 return sqlSessionFactory.openSession(); 43 } 44 }
四、映射器(接口+XML注解)
实现方式有两种:1.通过XML文件方式实现(推荐使用)
2.通过代码方式实现:在Configuration里面注册Mapper接口(需要写入Java注解),较为复杂。
先给出接口:UserMapper.java(xml方式)
1 public interface UserMapper { 2 int insert(User record); 3 List<User> select(); 4 }
然后给出映射文件:UserMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <mapper namespace="com.standard.dao.UserMapper"> 4 5 <resultMap id="BaseResultMap" type="com.standard.model.User"> 6 <id column="ID" jdbcType="INTEGER" property="id" /> 7 <result column="ACCOUNT" jdbcType="VARCHAR" property="account" /> 8 <result column="NAME" jdbcType="VARCHAR" property="name" /> 9 <result column="PASSWORD" jdbcType="VARCHAR" property="password" /> 10 <result column="ROLE_ID" jdbcType="INTEGER" property="roleId" /> 11 12 </resultMap> 13 <sql id="Base_Column_List"> 14 ID, ACCOUNT, NAME, PASSWORD, ROLE_ID 15 </sql> 16 17 <select id="select" resultMap="BaseResultMap"> 18 select 19 <include refid="Base_Column_List"/> 20 from STANDARD_USER 21 </select> 22
注意:
<?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">
可以同上边提到的mybatis-config.xml配置比较此部分内容,对小白理解mybatis或许会有帮助
五、最后测试一下
先展示一下POJO: User.java
public class User{ private Integer id; private String account; private String name; private String password; private Integer roleId; private Role role; //get set 方法省略...
然后写个测试类
public class UserTest { static SqlSession sqlSession=null; static UserMapper userMapper; public static void main(String[] args ) { try{ sqlSession=SqlSessionFactoryUtil.openSqlSession(); userMapper=sqlSession.getMapper(UserMapper.class); UserTest userTest=new UserTest(); //插入 int i =userTest.insert(); System.out.println(i); sqlSession2.commit(); }catch(Exception e){ System.err.println("---"+e.getMessage()); sqlSession.rollback(); }finally{ if(sqlSession!=null){ sqlSession.close(); } } } public int insert(){ User user=new User(); user.setId(9); user.setName("小白"); user.setAccount("admin"); user.setPassword("123456"); user.setRoleId(1); int i = userMapper.insert(user); return i; } }
最后就完成了一次插入数据库操作。
小白刚刚起步,欢迎吐槽~~