-
mybatis配置解析
一.引言:参考官方文档mybatis中提供了如下的配置,其中标红的需要掌握,其余的作为了解即可
二:配置解析之前的环境准备:进行配置之前要先有这几个东西,包括数据库表、Mybatis全局配置文件、实体类、mapper接口、mapper配置文件、用来连接数据库的工具类
1.建库建表
1 /* 2 SQLyog Ultimate v12.09 (64 bit) 3 MySQL - 5.7.24 : Database - mybatis 4 ********************************************************************* 5 */ 6 7 8 /*!40101 SET NAMES utf8 */; 9 10 /*!40101 SET SQL_MODE=''*/; 11 12 /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 13 /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 14 /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 15 /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 16 CREATE DATABASE /*!32312 IF NOT EXISTS*/`mybatis` /*!40100 DEFAULT CHARACTER SET latin1 */; 17 18 USE `mybatis`; 19 20 /*Table structure for table `user` */ 21 22 DROP TABLE IF EXISTS `user`; 23 24 CREATE TABLE `user` ( 25 `id` int(20) NOT NULL, 26 `name` varchar(30) DEFAULT NULL, 27 `pwd` varchar(30) DEFAULT NULL, 28 PRIMARY KEY (`id`) 29 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 30 31 /*Data for the table `user` */ 32 33 insert into `user`(`id`,`name`,`pwd`) values (1,'xiaoma','123'),(2,'zhangsan','1234'),(3,'lisi','12345'),(4,'王五','1234'),(5,'王六','123456'),(6,'王五','123456'); 34 35 /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; 36 /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; 37 /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; 38 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
2.新建一个maven项目,在resources文件夹下新建一个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> 6 <environments default="development"> 7 <environment id="development"> 8 <transactionManager type="JDBC"/> 9 <dataSource type="POOLED"> 10 <property name="driver" value="com.mysql.jdbc.Driver"/> 11 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> 12 <property name="username" value="root"/> 13 <property name="password" value="123456"/> 14 </dataSource> 15 </environment> 16 </environments> 17 <mappers> 18 <mapper resource="com/xiaoma/mapper/UserMapper.xml"/> 19 </mappers> 20 </configuration>
3.在java文件夹下新建一个util文件夹,用来存放工具类,在util文件夹下新建一个MybatisUtils.java的工具类
1 package com.xiaoma.utils; 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 MybatisUtils { 12 private static SqlSessionFactory sqlSessionFactory; 13 14 //1.获取sqlSessionFactory对象 15 static{ 16 try { 17 String resource="mybatis-config.xml"; 18 //以流的方式去读取配置文件信息 19 InputStream inputStream= Resources.getResourceAsStream(resource); 20 //拿到sqlSessionFactory才能吧执行sql的东西生产出来,通过SqlS essionFactoryBuilder去构建这个流 21 sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } 25 } 26 27 //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例 28 //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法 29 public static SqlSession getSession(){ 30 return sqlSessionFactory.openSession(); 31 } 32 }
4.在java文件夹下新建一个pojo文件夹,用来存放实体类,在pojo文件夹下新建一个名为User的实体类
1 package com.xiaoma.pojo; 2 3 import lombok.Data; 4 5 @Data 6 public class User { 7 private int id; 8 private String name; 9 private String pwd; 10 11 public User() { 12 } 13 14 public User(int id, String name, String pwd) { 15 this.id = id; 16 this.name = name; 17 this.pwd = pwd; 18 } 19 }
5.在java文件夹下新建一个mapper文件夹,用来存放mapper接口和配置文件,在mapper文件夹下新建一个名为UserMapper的接口,接口中包括简单的增删改查
1 package com.xiaoma.mapper; 2 3 import com.xiaoma.pojo.User; 4 import java.util.List; 5 6 public interface UserMapper { 7 //查询所有用户 8 List<User> selectUser(); 9 10 //根据id查询用户 11 User getUserById(int id); 12 13 //插入用户到user表 14 int insertUser(User user); 15 16 //根据用户名修改用户密码 17 int updataUser(User user); 18 19 //根据用户名删除用户 20 int deleteUser(String name); 21 }
6.在mapper文件夹下新建一个名为UserMapper.xml的配置文件,包括增删改查的实现,也就是写sql
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!--namespace:绑定一个dao接口--> 6 <mapper namespace="com.xiaoma.mapper.UserMapper"> 7 <!--查询所有用户--> 8 <select id="selectUser" resultType="com.xiaoma.pojo.User"> 9 select * from user 10 </select> 11 12 <!--根据id查询用户--> 13 <select id="getUserById" resultType="com.xiaoma.pojo.User"> 14 select * from user where id=#{id} 15 </select> 16 17 <!--向user表插入一个用户--> 18 <insert id="insertUser" parameterType="map"> 19 insert into user(id,name,pwd) values(#{id},#{name},#{pwd}) 20 </insert> 21 22 <!--根据用户名修改用户密码--> 23 <update id="updataUser" parameterType="com.xiaoma.pojo.User"> 24 update user set pwd=#{pwd} where name=#{name} 25 </update> 26 27 <!--根据用户名删除用户--> 28 <delete id="deleteUser" parameterType="com.xiaoma.pojo.User"> 29 delete from user where name=#{name} 30 </delete> 31 </mapper>
三:配置解析—环境配置(Environments)
1.MyBatis可以在environments配置多个environment,每一个environment都配一个唯一标识id,通过environments中的default属性绑定environment的id进行环境的切换(注意:多个环境的时候,MyBatis只能选择一种环境)
2.MyBatis中有两种事务管理器,一个是JDBC,一个是MANAGED ,默认的事务管理器是JDBC,MANAGED 这个事务管理器一般不去用他,因为官方文档告诉我们这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期
3.MyBatis的默认连接池POOLED
四:配置解析—属性配置(Properties)
1.在MyBatis01这个demo中,我把配置都包含在了全局配置文件(mybatis-config.xml)中,现在可以通过优化属性,动态获取driver,url,username等信息
2.第一步就是在resources文件夹下先建立一个db.properties文件,里边包含driver,url,username,password等信息
1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 3 username=root 4 password=123456
3.在全局配置文件中引入外部配置文件,然后通过${}的形式去绑定db.properties文件中的值
1 <!--引入外部配置文件--> 2 <properties resource="db.properties"/> 3 <environments default="development"> 4 <environment id="development"> 5 <transactionManager type="JDBC"/> 6 <dataSource type="POOLED"> 7 <!--通过${}绑定外部配置文件的属性--> 8 <property name="driver" value="${driver}"/> 9 <property name="url" value="${url}"/> 10 <property name="username" value="${username}"/> 11 <property name="password" value="${password}"/> 12 </dataSource> 13 </environment> 14 </environments>
4.在java文件夹下新建一个mybatis02的测试文件,编写测试代码,这里就以查询所有用户为例
1 package com.xiaoma; 2 3 import com.xiaoma.mapper.UserMapper; 4 import com.xiaoma.pojo.User; 5 import com.xiaoma.utils.MybatisUtils; 6 import org.apache.ibatis.session.SqlSession; 7 import org.junit.Test; 8 9 import java.util.List; 10 11 public class MyTest02 { 12 @Test 13 public void selectAllUser(){ 14 SqlSession session = MybatisUtils.getSession(); 15 UserMapper mapper = session.getMapper(UserMapper.class); 16 List<User> users = mapper.selectUser(); 17 for (User user:users) { 18 System.out.println(user); 19 } 20 } 21 }
5.运行效果
五:配置解析—别名配置(typeAliases)
方式1.在mybatis-config.xml这个全局配置文件中添加如下代码,这样的话就可以将UserMapper.xml中的resultType属性从com.xiaoma.pojo.User改为User
1 <!--别名配置--> 2 <typeAliases> 3 <typeAlias type="com.xiaoma.pojo.User" alias="User"></typeAlias> 4 </typeAliases>
方式2.以扫描包的方式去,和方式一的效果是一样的,如果用这个方式,建议将UserMapper.xml中的resultType属性从com.xiaoma.pojo.User改为user时u尽量用小写,不用大写。
1 <typeAliases> 2 <package name="com.xiaoma.pojo"/> 3 </typeAliases>
运行mybatis02测试文件,测试即可。
注:这两种方式,当实体类比较多可以用第二种,实体类比较少可以用第一种。
六:配置解析—设置配置(Setting),参考官方文档,这个地方太特喵的多了https://mybatis.org/mybatis-3/zh/configuration.html#settings
七:配置解析—映射配置(mappers):注册绑定我们的mapper文件的
有几个注意点:
1.mappers使用class方式和class方式绑定的时候,接口和他的mapper配置文件必须同名
2.mappers使用class方式和class方式绑定的时候。接口和他的mapper配置文件必须在同一个包下,使用resource不用注意这两种情况