Mybatis03 - 基础CURD

1 创建核心配置文件

其中配置连接数据库的环境

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 引入mybatis映射文件 -->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

2 创建 UserMapper接口

其中提供操作数据库的方法名

public interface UserMapper {

    //新增用户  一个mapper接口对应一个映射文件中的SQL语句
    int insertUser();
}

3 创建 UserMapper映射文件

其中,将SQL语句映射到 UserMapper接口类以及类中的具体方法,确保一致

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zzz.mybatis.mapper.UserMapper">

<!-- 两个映射必须一致
    namespace 映射类名 UserMapper
    id 映射类中的方法名,一个方法执行一条语句-DAO层
-->
    <insert id="insertUser">
        INSERT INTO t_user VALUES (null,'admin','123456','23','男','12345@qq.com');
    </insert>
</mapper>

4 JUnit测试 insert方法

进行测试时,需要 io流读取核心配置文件

再创建 SqlSessionFactoryBuilder对象 -> SqlSessionFactory对象 -> SqlSession对象

调用 sqlSession 中的 getMapper方法,通过代理模式,创建接口的代理实现类,得到实例对象从而调用方法

@Test
public void testInsert() throws IOException {
    //获取核心配置文件的输入流
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
    //获取 SqlSessionFactoryBuilder对象
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    //获取 SqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
    //获取 SQL的会话对象 SqlSession -- 是Mybatis提供的操作数据库的对象
    SqlSession sqlSession = sqlSessionFactory.openSession(true);

    //接口不能直接 new 实例对象
    //因此,通过sqlSession中的 getMapper方法
    //使用代理模式,创建接口的代理实现类
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    int result = userMapper.insertUser();
    System.out.println("结果:" + result);

    //如果 openSession方法中没有设置 true,则需要手动提交事务
    //sqlSession.commit();

    //关闭会话
    sqlSession.close();
}

最后,必须手动提交事务以及关闭会话

或者,直接调用 sqlSession中数据库操作方法(不常使用)

//接口不能直接 new 实例对象
//因此,通过sqlSession中的 getMapper方法
//使用代理模式,创建接口的代理实现类
//  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//  int result = userMapper.insertUser();

//通过Mapper文件中SQL语句的唯一标识定位SQL语句,从而执行SQL语句
//唯一标识:namespaces.sqlId = 定位到具体方法
int result = sqlSession.insert("com.zzz.mybatis.mapper.UserMapper.insertUser");

System.out.println("结果:" + result);

5 优化,将获取sqlSession的过程封装成工具类

public class SqlSessionUtil {

    //封装从读取文件一直到获取 sqlSession的方法
    public static SqlSession getSqlSession() {

        try {
            //获取核心配置文件的输入流
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

            //获取 SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            //获取 SqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
            //获取 SqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return sqlSession;
    }
}

从而在使用代理实例化接口类时,可以直接调用 sqlSession

SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int result = userMapper.insertUser();

6 查询,一条或多条结果

<!--    User getUserById();-->
<!--
    resultType: 设置结果类型,即查询的数据要转换为的java类型
    resultMap: 自定义映射关系,处理多对一或一对多的映射
-->
<select id="getUserById" resultType="com.zzz.mybatis.pojo.User">
    SELECT * FROM t_user WHERE id = 2;
</select>

<select id="getAllUsers" resultType="com.zzz.mybatis.pojo.User">
    SELECT * FROM t_user;
</select>

多条结果存放在 list集合中,通过 forEach遍历输出

@Test
public void testAllUsers(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    List<User> users = userMapper.getAllUsers();

    users.forEach(System.out::println);

    sqlSession.close();
}
posted @   LaViez  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示