写点什么

MyBatis 专栏 - 进阶 (引入外部配置文件, 类型参数设置)

用户头像
小马哥
关注
发布于: 2021 年 02 月 05 日
MyBatis专栏 - 进阶(引入外部配置文件, 类型参数设置)

01.引入外部 properties 文件

1, 创建外部配置文件

在工程的 resources 目录下面创建关于数据库信息的 jdbc.properties 文件, 内容如下

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8jdbc.username=rootjdbc.password=root
复制代码


2, 在主配置文件中引入文件

这里引入的是上面刚刚创建的 jdbc.properties 文件

主配置文件: SqlMapConfig.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>    <!--  引入外部配置文件  -->        <properties resource="jdbc.properties"></properties>    <environments default="dev">        <environment id="dev">            <transactionManager type="JDBC"></transactionManager>            <dataSource type="POOLED">                <property name="driver" value="${jdbc.driver}"/>                <property name="url" value="${jdbc.url}"/>                <property name="username" value="${jdbc.username}"/>                <property name="password" value="${jdbc.password}"/>            </dataSource>        </environment>    </environments>
<mappers> <mapper resource="com/nengli51/UserDao.xml"></mapper> </mappers></configuration>
复制代码


3. 测试

略(使用上一节编写的代码能够正常操作数据库)

02.设置类型别名

第一种方式: 单个定义

主配置文件: SqlMapConfig.xml

<!-- 进阶02.设置类型别名   -->    <typeAliases>        <typeAlias type="com.nengli51.pojo.User" alias="user"></typeAlias>    </typeAliases>
复制代码


Mapper 配置文件: resources/com/nengli51/UserDao.xml 文件

<mapper namespace="com.nengli51.dao.UserDao">    <!-- 进阶2: 在主配置文件设置的类型别名, 于是在当前文件可以简写作为替换   -->    <select id="findUser" resultType="user" parameterType="int">        select *        from user        where uid = #{id};    </select>    <select id="findAll" resultType="user">        select *        from user    </select>
<insert id="addUser" parameterType="user"> insert into user values (null, #{username}, #{sex}, #{birthday}, #{address}) </insert>
<delete id="deleteUser" parameterType="int"> delete from user where uid = #{uid} </delete>
<update id="updateUser" parameterType="user"> update user set username=#{username}, sex=#{sex}, birthday=#{birthday}, address=#{address} where uid = #{uid} </update></mapper>
复制代码


第二种方式: 指定文件或者指定路径

原理: 设置 package 为别名, 则该 package 目录下的类型文件都可以被直接缩写使用

    <mappers>        <!-- 方式一:引入映射文件路径       --><!--        <mapper resource="com/nengli51/dao/UserDao.xml"></mapper>-->        <!-- 方式二:扫描接口 单个Mapper配置文件制定--><!--        <mapper class="com.nengli51.dao.UserDao"></mapper>-->        <!-- 方式三:扫描接口 批量Mapper配置文件制定-->        <package name="com.nengli51.dao"/>    </mappers>
复制代码


03.抽取 SQLSessionFactory 为单例

package com.nengli51.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;
/** * @Date 2021/2/5 */public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory = null; static{ InputStream is = null; try { SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); is = Resources.getResourceAsStream("SqlMapConfig.xml"); sqlSessionFactory = sqlSessionFactoryBuilder.build(is); } catch (IOException e) { e.printStackTrace(); }finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } }
/** * 获取SqlSessionFactory */ public static SqlSessionFactory getSqlSessionFactory(){ return sqlSessionFactory; }
/** * 提交事务, 关闭SqlSession */
public static void commitAndClose(SqlSession sqlSession){ sqlSession.commit(); sqlSession.close(); }
public static void rollbackAndClose(SqlSession sqlSession){ sqlSession.rollback(); sqlSession.close(); }}
复制代码


测试使用

@Testpublic void testSingleInstance(){    SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession();    UserDao userDao = sqlSession.getMapper(UserDao.class);    List<User> all = userDao.findAll();    for (User user : all) {        System.out.println(user);    }    MyBatisUtils.commitAndClose(sqlSession);}
复制代码


04.parameterType 深入

1, SQL 语句需要一个参数: 使用简单数据类型参数

2, 多个参数: (1), 使用对象封装;(2), 使用 map 类型;(3), 如果参数复杂, 可以使用对象封装对象.

创建代表查询参数的 Bean

package com.nengli51.pojo;
import lombok.Data;
/** * @Date 2021/2/5 */@Datapublic class QueryBean { private int id;}
复制代码

创建 Dao

package com.nengli51.dao;
import com.nengli51.pojo.QueryBean;import com.nengli51.pojo.User;
public interface UserDao2 { User findUser(QueryBean queryBean);}
复制代码

创建配置文件

<?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.nengli51.dao.UserDao2">    <!-- 测试Parameter类型:2, 对象作为参数类型 -->    <select id="findUser" resultType="user" parameterType="com.nengli51.pojo.QueryBean">        select *        from user        where uid = #{id};    </select></mapper>
复制代码


修改核心配置文件

<?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>    <!-- 进阶01.引入外部配置文件  -->    <properties resource="jdbc.properties"></properties>    <!-- 进阶02.设置类型别名   -->    <typeAliases>        <!--  方式1: 单个类型定义        <typeAlias type="com.nengli51.pojo.User" alias="user"></typeAlias>        -->        <!--  方式2: 批量定义类型别名   -->        <package name="com.nengli51.pojo"></package>    </typeAliases>    <environments default="dev">        <environment id="dev">            <transactionManager type="JDBC"></transactionManager>            <dataSource type="POOLED">                <property name="driver" value="${jdbc.driver}"/>                <property name="url" value="${jdbc.url}"/>                <property name="username" value="${jdbc.username}"/>                <property name="password" value="${jdbc.password}"/>            </dataSource>        </environment>    </environments>
<mappers> <!-- 方式一:引入映射文件路径 --><!-- <mapper resource="com/nengli51/dao/UserDao.xml"></mapper>--> <!-- 方式二:扫描接口 单个Mapper配置文件制定--><!-- <mapper class="com.nengli51.dao.UserDao"></mapper>--> <!-- 方式三:扫描接口 批量Mapper配置文件制定--> <package name="com.nengli51.dao"/> </mappers></configuration>
复制代码


测试

package com.nengli51;
import com.nengli51.dao.UserDao2;import com.nengli51.pojo.QueryBean;import com.nengli51.pojo.User;import com.nengli51.utils.MyBatisUtils;import org.apache.ibatis.session.SqlSession;import org.junit.Test;
/** * @Date 2021/2/5 */public class TestMybatisDemo3 { @Test public void testMethod(){
SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession(); UserDao2 userDao = sqlSession.getMapper(UserDao2.class); QueryBean queryBean = new QueryBean();
queryBean.setId(1); User user = userDao.findUser(queryBean); System.out.println(user); }}
复制代码


发布于: 2021 年 02 月 05 日阅读数: 28
用户头像

小马哥

关注

自强不息,厚德载物 2018.12.22 加入

像一棵竹子那样, 不断的扎根积累, 活出节节高的人生!

评论

发布
暂无评论
MyBatis专栏 - 进阶(引入外部配置文件, 类型参数设置)