mybatis配置解析

一.引言:参考官方文档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&amp;useUnicode=true&amp;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.运行效果mybatis配置解析

 

五:配置解析—别名配置(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不用注意这两种情况

上一篇:踩坑日记(二)Redis篇


下一篇:Java 使用URLEncoder.encode和URLDecoder.decode编解码(utf-8)中文及特殊字符