• Mybatis实训内容


    Mybatis

    Mybatis介绍:

    概念

    orm的数据库持久层框架 ,内存中的数据保存到磁盘或者数据库中

    ORM概念:

    对象关系映射 ,解决面向对象与关系数据库存在的互不匹配的现象的技术

    ORM的映射方式

    把sql配置再sql文件中,通过不同的sql完成对象实体与数据库关系的相互转换

    ORM好处
    1. 把实体模型和数据库表映射

    2. orm框架启动加载映射和数据库配置文件

    3. orm对原生的jdbc封装提供了更多的api

    4. 持久层通过orm提供的便捷的api以对象的方式操作数据库更加便捷

    Mybatis操作步骤
    1. 导入jar包 (mybatis.jar)

    2. 新建包

    实现一个需求:使用mybatis的方式实现CRUD

    1. 新增dao包/impl(新增接口以及接口实现类),mybatis给我们提供了一个sqlSession(这个sqlSession也类似于我们的jdbc、Dbcp、Druid提供的核心类一样),通过sqlSession去获取到对应的连接。

    Mybatis核心配置文件:

    src目录下mybatis_configuration.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>
        <!--加载jdbc参数的配置文件 -->
        <properties resource="jdbc.properties"></properties>
        <environments default="dev">
          <!--环境参数:可以支持多个环境   eg:开发、本地、云端-->
            <environment id="dev">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driverClassName}"></property>
                    <property name="url" value="${jdbc.url}"></property>
                    <property name="username" value="${jdbc.username}"></property>
                    <property name="password" value="${jdbc.password}"></property>
                </dataSource>
            </environment>
        </environments>
        <!--mybatis有一个非常明显的特点就是将sql文件从代码中分离出去 -->
        <!--以下标签就是表示被剥离出代码的sql文件-->
        <mappers>
            <mapper resource="com/wolfcode/mybatis_test/mapper/UserMapper.xml"></mapper>
        </mappers>
    
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    src目录下的jdbc参数的配置文件(jdbc.properties):

    jdbc.driverClassName=com.mysql.cj.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/test_1
    jdbc.username=root
    jdbc.password=123456
    
    • 1
    • 2
    • 3
    • 4

    怎么通过核心配置文件获取 sqlSession? 建造者模式

    MyBatisUtil工具类

    /**
     * 提供sqlSesion的方法
     * SqlSession来源于SqlSessionFactory
     * SqlSessionFactory又是通过SqlSessionFactoryBuilder构建
     */
    public class MyBatisUtil {
    
        //先要申明一个SqlSessionFactory
        static SqlSessionFactory sqlSessionFactory ;
        //通过静态代码块为sqlSessionFactory赋值
        static{
            try {
                //创建一个sqlSessionFactory工具
                SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
                //先要加载到我们核心的配置文件 InputStream
                InputStream stream = Resources.getResourceAsStream("mybatis_config.xml");
                //通过工具构建一个sqlSessionFactory(根据流去构建sqlSessionFactory)
                sqlSessionFactory = builder.build(stream);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        //获取sqlSession
        public static SqlSession getSqlSession(){
            // 开启自动提交  也可以在daoImpl中使用 sqlSession.commit()方法进行手动提交
          return  sqlSessionFactory.openSession(true);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    Dao层

    UserDao接口:

    /**
     * 用户持久层接口
     */
    public interface UserDao {
    
        /**
         * 插入用户
         * @param user
         */
         void insert(T_user user) ;
    
        /**
         * 修改用户
         * @param user
         */
         void update(T_user user) ;
    
        /**
         * 删除操作
         * @param uid
         */
         void delete(Integer uid) ;
    
        /**
         *多条记录查询
         * @param paramMap
         * @return
         */
        List<T_user> selectUserList(Map<String,Object> paramMap) ;
    
        /**
         * 查询单条查询
         * @param uid
         * @return
         */
        T_user selectSingle(Integer uid);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    UserDaoImpl:

    /**
     * 持久层UserDao接口实现类
     */
    public class UserDaoImpl implements UserDao {
    
        @Override
        public void insert(T_user user) {
            //首先获取连接
            SqlSession sqlSession = MyBatisUtil.getSqlSession(); 
            // 第一个参数为 命名空间+id(id也就是操作)  第二个参数就是该方法传入的参数即待插入的数据
            // 整体代表 指定的xml文件中的sql语句
            int insert = sqlSession.insert("com.wolfcode.mybatis_test.dao.UserDao.insert", user);
            System.out.println(insert);
            sqlSession.commit();
        }
    
        @Override
        public void update(T_user user) {
            SqlSession sqlSession = MyBatisUtil.getSqlSession();
            sqlSession.update("com.wolfcode.mybatis_test.dao.UserDao.update",user) ;
        }
    
        @Override
        public void delete(Integer uid) {
            SqlSession sqlSession = MyBatisUtil.getSqlSession();
            sqlSession.delete("com.wolfcode.mybatis_test.dao.UserDao.delete",uid);
        }
    
        @Override
        public List<T_user> selectUserList(Map<String, Object> paramMap) {
            SqlSession sqlSession = MyBatisUtil.getSqlSession();
            return sqlSession.selectList("com.wolfcode.mybatis_test.dao.UserDao.selectUserList", paramMap);
        }
    
        @Override
        public T_user selectSingle(Integer uid) {
            SqlSession sqlSession = MyBatisUtil.getSqlSession();
            return sqlSession.selectOne("com.wolfcode.mybatis_test.dao.UserDao.selectSingle", uid);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    Dao层接口对应的Mapper.xml文件

    UserDao接口对应的UserMappere.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">
    <!--namespace 命名空间 用于将userDao与xml文件进行一个关联  -->
    <mapper namespace="com.wolfcode.mybatis_test.dao.UserDao">
    
    <!--    id 对应 UserDao中的方法  -->
        <insert id="insert" parameterType="com.wolfcode.mybatis_test.entity.T_user">
            insert into t_user values(#{uid},#{uname},#{uphone},#{uidcard},#{rid})
        </insert>
    
        <update id="update" parameterType="com.wolfcode.mybatis_test.entity.T_user">
            update t_user
    --             动态拼接sql语句  prefix表示前缀   suffixOverrides以什么结尾
            <trim prefix="set" suffixOverrides=",">
                <if test="uname !=null and uname!=''">
                    uname=#{uname},
                </if>
                <if test="uphone !=null and uphone!=''">
                    uphone=#{uphone},
                </if>
                <if test="uidcard !=null and uidcard!=''">
                    uidcard=#{uidcard},
                </if>
                <if test="rid != null">
                    rid=#{rid},
                </if>
            </trim>
    --             如果uid存在  就根据uid更改数据
            <if test="uid !=null">
                where uid=#{uid}
            </if>
        </update>
    
        <delete id="delete" parameterType="java.lang.Integer">
            delete from t_user where uid=#{uid}
        </delete>
    
        <select id="selectSingle" parameterType="java.lang.Integer" resultType="com.wolfcode.mybatis_test.entity.T_user">
            select * from t_user where uid=#{uid}
        </select>
        <select id="selectUserList" parameterType="java.util.Map" resultType="com.wolfcode.mybatis_test.entity.T_user">
            select * from t_user
            <where>
                <if test="uname !=null">
                    uname=#{uname}
                </if>
                <if test="uphone !=null">
                  or uphone=#{uphone}
                </if>
            </where>
        </select>
    
    
    
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    测试代码:原始的方式进行测试

    public class MyTest {
    
        /**
         * 多条记录查询
         */
        @Test
        public void test5_userDao_selectUserList(){
            UserDao userDao = new UserDaoImpl();
            Map<String,Object> paramMap=new HashMap<String,Object>() ;
            //paramMap.put("uname","凯");
            paramMap.put("uphone","321");
            List<T_user> t_users = userDao.selectUserList(paramMap);
            for(T_user user:t_users){
                System.out.println(user);
            }
        }
    
    
        /**
         * 测试单条用户查询
         */
        @Test
        public void test4_userDao_selectSingle(){
            UserDao userDao = new UserDaoImpl();
            T_user t_user = userDao.selectSingle(1);
            System.out.println(t_user);
        }
    
        /**
         * 删除测试
         */
        @Test
        public void test3_userDao_delete(){
            UserDao userDao = new UserDaoImpl();
            userDao.delete(100);
        }
    
        /**
         * 测试UserDao更新操作
         */
        @Test
        public void test2_UserDao_update(){
            UserDao userDao = new UserDaoImpl();
            T_user t_user = new T_user();
            t_user.setUname("凯");
            //t_user.setUid(100);
            userDao.update(t_user);
        }
    
        /**
         * 测试UserDao插入
         */
        @Test
        public void test1_UserDao_insert(){
            UserDao userDao= new UserDaoImpl() ;
            //创建用户信息
            T_user user=new T_user() ;
            user.setUid(100);
            user.setUname("Jerry");
            user.setUphone("18780089624");
            user.setUidcard("513701200002020000");
            user.setRid(1);
            userDao.insert(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
  • 相关阅读:
    网工知识角|华为网络工程师,华为、华三、思科设备三层交换机如何使用三层接口?命令敲起来
    JAVA-元注解和注解
    理解深度可分离卷积
    discuz教程 毫无基础常识的站长搭建HTTPS。图文并茂
    Postman和Jmeter的区别
    go读取yaml,json,ini等配置文件
    C++ Primer 总结索引 | 第八章:IO库
    Linux学习之make/Makefile
    求第n项的因子数量
    去掉img自带边框,前端文件下载,图片转base64发送后端
  • 原文地址:https://blog.csdn.net/ailaohuyou211/article/details/126288299