mybatis配置解析
Posted XiaoMa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis配置解析相关的知识,希望对你有一定的参考价值。
一.引言:参考官方文档mybatis中提供了如下的配置,其中标红的需要掌握,其余的作为了解即可
二:配置解析之前的环境准备:进行配置之前要先有这几个东西,包括数据库表、Mybatis全局配置文件、实体类、mapper接口、mapper配置文件、用来连接数据库的工具类
1.建库建表
; ; ; ; ; ; CREATE DATABASE `mybatis` ; USE `mybatis`; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(20) NOT NULL, `name` varchar(30) DEFAULT NULL, `pwd` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into `user`(`id`,`name`,`pwd`) values (1,\'xiaoma\',\'123\'),(2,\'zhangsan\',\'1234\'),(3,\'lisi\',\'12345\'),(4,\'王五\',\'1234\'),(5,\'王六\',\'123456\'),(6,\'王五\',\'123456\'); ; ; ; ;
2.新建一个maven项目,在resources文件夹下新建一个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"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/xiaoma/mapper/UserMapper.xml"/> </mappers> </configuration>
3.在java文件夹下新建一个util文件夹,用来存放工具类,在util文件夹下新建一个MybatisUtils.java的工具类
package com.xiaoma.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; //1.获取sqlSessionFactory对象 static{ try { String resource="mybatis-config.xml"; //以流的方式去读取配置文件信息 InputStream inputStream= Resources.getResourceAsStream(resource); //拿到sqlSessionFactory才能吧执行sql的东西生产出来,通过SqlS essionFactoryBuilder去构建这个流 sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例 //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法 public static SqlSession getSession(){ return sqlSessionFactory.openSession(); } }
4.在java文件夹下新建一个pojo文件夹,用来存放实体类,在pojo文件夹下新建一个名为User的实体类
package com.xiaoma.pojo; import lombok.Data; @Data public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } }
5.在java文件夹下新建一个mapper文件夹,用来存放mapper接口和配置文件,在mapper文件夹下新建一个名为UserMapper的接口,接口中包括简单的增删改查
package com.xiaoma.mapper; import com.xiaoma.pojo.User; import java.util.List; public interface UserMapper { //查询所有用户 List<User> selectUser(); //根据id查询用户 User getUserById(int id); //插入用户到user表 int insertUser(User user); //根据用户名修改用户密码 int updataUser(User user); //根据用户名删除用户 int deleteUser(String name); }
6.在mapper文件夹下新建一个名为UserMapper.xml的配置文件,包括增删改查的实现,也就是写sql
<?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.xiaoma.mapper.UserMapper"> <!--查询所有用户--> <select id="selectUser" resultType="com.xiaoma.pojo.User"> select * from user </select> <!--根据id查询用户--> <select id="getUserById" resultType="com.xiaoma.pojo.User"> select * from user where id=#{id} </select> <!--向user表插入一个用户--> <insert id="insertUser" parameterType="map"> insert into user(id,name,pwd) values(#{id},#{name},#{pwd}) </insert> <!--根据用户名修改用户密码--> <update id="updataUser" parameterType="com.xiaoma.pojo.User"> update user set pwd=#{pwd} where name=#{name} </update> <!--根据用户名删除用户--> <delete id="deleteUser" parameterType="com.xiaoma.pojo.User"> delete from user where name=#{name} </delete> </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等信息
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8 username=root password=123456
3.在全局配置文件中引入外部配置文件,然后通过${}的形式去绑定db.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>
4.在java文件夹下新建一个mybatis02的测试文件,编写测试代码,这里就以查询所有用户为例
package com.xiaoma; import com.xiaoma.mapper.UserMapper; import com.xiaoma.pojo.User; import com.xiaoma.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class MyTest02 { @Test public void selectAllUser(){ SqlSession session = MybatisUtils.getSession(); UserMapper mapper = session.getMapper(UserMapper.class); List<User> users = mapper.selectUser(); for (User user:users) { System.out.println(user); } } }
5.运行效果
五:配置解析—别名配置(typeAliases)
方式1.在mybatis-config.xml这个全局配置文件中添加如下代码,这样的话就可以将UserMapper.xml中的resultType属性从com.xiaoma.pojo.User改为User
<!--别名配置--> <typeAliases> <typeAlias type="com.xiaoma.pojo.User" alias="User"></typeAlias> </typeAliases>
方式2.以扫描包的方式去,和方式一的效果是一样的,如果用这个方式,建议将UserMapper.xml中的resultType属性从com.xiaoma.pojo.User改为user时u尽量用小写,不用大写。
<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不用注意这两种情况
以上是关于mybatis配置解析的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!
Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!
Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!
Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!
13.3.2 完整的MBG配置文件(MyBatis Generator逆向代码生成工具) -《SSM深入解析与项目实战》