28.Mybatis的入门

目录

一、Mybatis的入门。

(1)Mybatis的简介。 

(2)Mybatis的快速入门。

(2.1)快速入门。 

(2.2)UserMapper.xml文件。

(2.3)sqlMapConfig.xml文件。

(2.4)测试类代码。

(3)MyBatis的映射文件概述。

(4)MyBatis的增删改查操作。

(4.1)查询操作。

(4.2)插入操作。

(4.3)修改操作。

(4.4)删除操作。

(4.5)增删改查映射配置知识小结。

(5)MyBatis的核心配置文件概述。

(5.1)mybatis核心配置文件层级关系。

(5.2)mybatis常用配置解析。 

(5.3)知识小结。

(6)MyBatis的相应API。 

(7) MyBatis的Dao层实现。

(7.1)传统开发方式。 

(7.2)代理开发模式。

(7.3)dao层实现的两种方式知识小结。 

(8)MyBatis映射文件深入。

(8.1)动态sql语句。

(8.2)sql语句的抽取。 

(8.3)mybatis映射文件配置知识小结。

(9)MyBatis核心配置文件深入。

(9.1)typeHandlers(类型处理器)标签。

(9.2)plugins(插件)标签。

(9.3)MyBatis核心配置文件常用标签小结。


一、Mybatis的入门。

(1)Mybatis的简介。 

Mybatis是一个持久层框架。 

(2)Mybatis的快速入门。

(2.1)快速入门。 

(2.2)UserMapper.xml文件。

<?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="userMapper">
    <select id="findAll" resultType="domain.User">
        select * from user
    </select>
</mapper>

(2.3)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>
    <!--数据源环境-->
    <environments default="development"><!--默认使用下面id为development的环境-->
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="tan"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

(2.4)测试类代码。

package test;
public class MyBatisTest {
    @Test
    public void test1() throws IOException {
        //1.获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行操作
        List<User> userList = sqlSession.selectList("userMapper.findAll");
        //5.打印数据
        System.out.println(userList);
        //6.释放资源
        sqlSession.close();
    }
}

(3)MyBatis的映射文件概述。

(4)MyBatis的增删改查操作。

(4.1)查询操作。

<?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="userMapper">
    <!--1、查询操作-->
    <select id="findAll" resultType="domain.User">
        select * from user
    </select>
    <!--2、插入操作-->
    <insert id="save" parameterType="domain.User">
        insert into user values (#{id},#{username},#{password})
    </insert>
    <!--3、修改操作-->
    <update id="update" parameterType="domain.User">
        update user set username=#{username},password=#{password} where id = #{id}
    </update>
    <!--4、删除操作-->
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id = #{id}
    </delete>
</mapper>
    @Test
    //查询操作
    public void test1() throws IOException {
        //1.获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行操作
        List<User> userList = sqlSession.selectList("userMapper.findAll");
        //5.打印数据
        System.out.println(userList);
        //6.释放资源
        sqlSession.close();
    }

(4.2)插入操作。

<?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="userMapper">
    <!--2、插入操作-->
    <insert id="save" parameterType="domain.User">
        insert into user values (#{id},#{username},#{password})
    </insert>
</mapper>
    @Test
    //插入操作
    public void test2() throws IOException {
        //模拟user对象
        User user = new User();
        //user.setId(-1);//设置为0(不设置,默认为0)则自增,设置其他不自增(负数,整数,导致都不会自增)
        user.setUsername("asss");
        user.setPassword("abc");

        //1.获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行操作 参数:namespace+id(命名空间.id)
        sqlSession.insert("userMapper.save",user);
        //5.mybatis执行更新操作,提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
    }

(4.3)修改操作。

<?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="userMapper">
    <!--3、修改操作-->
    <update id="update" parameterType="domain.User">
        update user set username=#{username},password=#{password} where id = #{id}
    </update>
</mapper>
    @Test
    //修改操作
    public void test3() throws IOException {
        //模拟user对象
        User user = new User();
        user.setId(-1);
        user.setUsername("lucy");
        user.setPassword("123");

        //1.获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行操作 参数:namespace+id(命名空间.id)
        sqlSession.update("userMapper.update",user);
        //5.mybatis执行更新操作,提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
    }

(4.4)删除操作。

<?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="userMapper">
    <!--4、删除操作-->
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id = #{id}
    </delete>
</mapper>
    @Test
    //删除操作
    public void test4() throws IOException {
        //1.获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行操作 参数:namespace+id(命名空间.id)
        sqlSession.delete("userMapper.delete",8);
        //5.mybatis执行更新操作,提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
    }

(4.5)增删改查映射配置知识小结。

(5)MyBatis的核心配置文件概述。

(5.1)mybatis核心配置文件层级关系。

(5.2)mybatis常用配置解析。 

注意:<typeAliases>标签放在核心文件中,但是别名在映射文件中使用。

<?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">&lt;!&ndash;默认使用下面id为development的环境&ndash;&gt;
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="tan"/>
            </dataSource>
        </environment>
    </environments>-->

    <!--通过properties标签加载外部properties文件-->
    <properties resource="jdbc.properties"></properties>

    <!--定义别名就,这标签不能随便放,dtd约束的标签有顺序要求-->
    <typeAliases>
        <typeAlias type="domain.User" alias="user"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <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="mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

(5.3)知识小结。

(6)MyBatis的相应API。 

public void test1() throws IOException {
        //1.获取核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //2.获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3.获取session会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行操作
        List<User> userList = sqlSession.selectList("userMapper.findAll");
        //5.打印数据
        System.out.println(userList);
        //6.释放资源
        sqlSession.close();
    }

(7) MyBatis的Dao层实现。

(7.1)传统开发方式。 

(7.2)代理开发模式。

(1)接口。

package dao;
public interface UserMapper {
    public List<User> findAll() throws IOException;
    public User findById(int id);
}

 (2)映射文件的配置。

<?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="dao.UserMapper">
    <!--1、查询操作-->
    <select id="findAll" resultType="domain.User">
        select * from user
    </select>
    <!--根据id进行查询-->
    <select id="findById" parameterType="int" resultType="domain.User">
        select * from user where id = #{id}
    </select>
</mapper>

(3)测试代理模式方式的代码。

package service;
public class ServiceDemo {
    public static void main(String[] args) throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        List<User> all = mapper.findAll();
//        System.out.println(all);
        User user = mapper.findById(1);
        System.out.println(user);
    }
}

(7.3)dao层实现的两种方式知识小结。 

(8)MyBatis映射文件深入。

(8.1)动态sql语句。

package mapper;
public interface UserMapper {
    public List<User> findByCondition(User user);
    public List<User> findByIds(List<Integer> ids);
}
<?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="mapper.UserMapper">
    <!--sql语句抽取-->
    <sql id="selectUser">select * from user</sql>
    <select id="findByCondition" resultType="domain.User" parameterType="domain.User">
        <!--引用sql语句-->
        <include refid="selectUser"></include>
        /*select * from user*/
        <where>
            <if test="id!=0">
                and id = #{id}
            </if>
            <if test="username!=null">
                and username = #{username}
            </if>
            <if test="password!=null">
                and password = #{password}
            </if>
        </where>
    </select>
    <select id="findByIds" parameterType="list" resultType="domain.User">
        select * from user
        <where>
            <!--select * from user where id in(1,2,3)-->
            <foreach collection="list" open="id in(" close=")" item="id" separator=",">
                #{id}
            </foreach>
        </where>
    </select>

</mapper>

(8.2)sql语句的抽取。 

(8.3)mybatis映射文件配置知识小结。

(9)MyBatis核心配置文件深入。

(9.1)typeHandlers(类型处理器)标签。

类型处理器的作用有两个:java类型  《——》 数据库类型。(自动根据类型转换)

1.类型转换器类: 

package handler;
public class DateTypeHandler extends BaseTypeHandler<Date> {
    @Override
    //将java类型 转换成 数据库需要的类型
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Date date, JdbcType jdbcType) throws SQLException {
        //i为参数的位置(比如插入数据中的第几个数据)
        long time = date.getTime();
        preparedStatement.setLong(i,time);
    }
    @Override
    //将数据库中类型 转换成 java类型
    public Date getNullableResult(ResultSet resultSet, String s) throws SQLException {
        //String参数  要转换的字段名称
        //ResultSet  查询出的结果集
        //获得结果集中需要的数据(long)转换成Date类型
        long aLong = resultSet.getLong(s);
        Date date = new Date(aLong);
        return date;
    }
    @Override
    //将数据库中类型 转换成 java类型
    public Date getNullableResult(ResultSet resultSet, int i) throws SQLException {
        //i参数  要转换的字段位置
        //获得结果集中需要的数据(long)转换成Date类型
        long aLong = resultSet.getLong(i);
        Date date = new Date(aLong);
        return date;
    }
    @Override
    //将数据库中类型 转换成 java类型
    public Date getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        //i参数  要转换的字段位置
        //获得结果集中需要的数据(long)转换成Date类型
        long aLong = callableStatement.getLong(i);
        Date date = new Date(aLong);
        return date;
    }
}

2.映射配置xml文件: 

<?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="mapper.UserMapper">
    <insert id="save" parameterType="user">
        insert into user values(#{id},#{username},#{password},#{birthday})
    </insert>
</mapper>

 3.核心配置xml文件: 

<!--注册类型处理器-->
    <typeHandlers>
        <typeHandler handler="handler.DateTypeHandler"></typeHandler>
    </typeHandlers>

 4.测试方法代码:

4.1(Date类型——》bigint类型)即java类型  ——》 数据库类型

public void test1() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //创建user
        User user = new User();
        user.setUsername("ceshi");
        user.setPassword("abc");
        user.setBirthday(new Date());
        //执行保存操作
        mapper.save(user);

        sqlSession.commit();
        sqlSession.close();
    }

 4.2(bigint类型——Date类型)即java类型  《—— 数据库类型

public void test2() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //执行查询操作
        User user = mapper.findById(23);
        System.out.println(user);
        sqlSession.close();
    }

(9.2)plugins(插件)标签。

1.导入坐标。

注意:这两个坐标的版本容易出现版本不兼容,改了很可能出现转换类型异常。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <dependencies>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>3.7.5</version>
        </dependency>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>0.9.1</version>
        </dependency>
    </dependencies>
</project>

 2.核心配置xml文件:

在MyBatis中,配置分页插件需要指定数据库的方言(Dialect),以便插件能够正确地生成SQL语句并进行分页查询。不同的数据库有不同的方言实现,例如MySQL、Oracle、SQL Server等。(有的版本可能不需要配置方言(或许配置了就出现错误),但是我用的版本是必须要的,不然报错) 

<!--配置分页助手插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!--指定方言-->
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>

3.测试方法代码:

public void test3() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //设置分页相关参数,当前页+和每页显示的条数
        PageHelper.startPage(2,4);
        //执行查询全部操作
        List<User> userList = mapper.findAll();
        System.out.println(userList);
        //获取分页相关参数
        PageInfo<User> pageInfo = new PageInfo<>(userList);
        System.out.println("当前页:"+pageInfo.getPageNum());
        System.out.println("每页显示条数:"+pageInfo.getPageSize());
        System.out.println("总条数:"+pageInfo.getTotal());
        System.out.println("总页数:"+pageInfo.getPages());
        System.out.println("上一页:"+pageInfo.getPrePage());
        System.out.println("下一页:"+pageInfo.getNextPage());
        System.out.println("是否是第一页:"+pageInfo.isIsFirstPage());
        System.out.println("是否是最后一页:"+pageInfo.isIsLastPage());
        sqlSession.close();
    }

(9.3)MyBatis核心配置文件常用标签小结。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值