zoukankan      html  css  js  c++  java
  • Mybatis学习记录(1)

    1.Mybatis介绍

        Mybatis是apache的一个开源项目iBatis,Mybatis是一个优秀的持久层框架,他对jdbc的操作数据库的过程进行封装,使开发者只需要关注sql本身,不需要花费精力去处理例如注册驱动,创建connection,创建statement,手动设置参数,结果集检索等jdbc复杂的过程代码。

     Mybatis通过xml或注解的方式将要执行的各种statement(statement,preparedStatement,CallableStatement)配安置起来,并通过java对象和statement中的sql进行映射生成最终执行sql语句,最后由mybatis框架执行sql,并将结果映射成java对象返回。

    2.jdbc编程问题

       (1)数据库连接创建,释放频繁造成系统资源浪费,从而影响系统性能。(使用连接池可以解决此问题)

       (2)Sql语句在代码中硬编码,造成代码不亦伟乎,实际应用中sql变化的可能较大,sql变动需要改变java代码。

       (3)使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。

       (4)对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护。(将数据库记录封装成pojo对象解析比较方便)

    3.Mybatis架构

      

      (1)mybatis配置SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。

        此文件需要在SqlMapConfig.xml中加载。

      (2)通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

      (3)由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

      (4)mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

      (5)Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

      (6)Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,

      输入参数映射就是jdbc编程中对preparedStatement设置参数。    

      (7)Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中

      对结果的解析处理过程。

     4.使用Mybatis的入门程序

     先配置核心文件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>
        <!-- 和spring整合后 environments配置将废除  链接Mysql时,spring管理连接 jdbcTemplate c3p0-->
        <environments default="development">
            <environment id="development">
                <!-- 使用jdbc事务管理 -->
                <transactionManager type="JDBC" />
                <!-- 数据库连接池 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url"
                        value="jdbc:mysql://localhost:3306/javaweb_mybatis?characterEncoding=utf-8" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
        
        <!-- Mapper的位置 -->
        <mappers>
            <mapper resource="sqlMap/User.xml"/>
        </mappers>
    </configuration>

    建立pojo对象

    package com.javaweb.mybatis.model;
    
    import java.io.Serializable;
    
    public class User implements Serializable{
    
        /**
         * user表的pojo对象
         */
        private static final long serialVersionUID = 1L;
        private String id;
        private String userName;
        private String userAge;
        private String userSex;
        private String userAddress;
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getUserAge() {
            return userAge;
        }
        public void setUserAge(String userAge) {
            this.userAge = userAge;
        }
        public String getUserSex() {
            return userSex;
        }
        public void setUserSex(String userSex) {
            this.userSex = userSex;
        }
        public String getUserAddress() {
            return userAddress;
        }
        public void setUserAddress(String userAddress) {
            this.userAddress = userAddress;
        }
        @Override
        public String toString() {
            // TODO Auto-generated method stub
            return "User [id=" + id + ", username=" + userName + ", sex=" + userSex
                    + ", userAge=" + userAge + ", userAddress=" + userAddress + "]";
        }
            
        
    
    }

    配置sql映射文件User.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">
    <!-- 写sql语句 -->
    <mapper namespace="test">
    </mapper>

    (1)根据id查询用户

    /*
         * 根据id查询用户
         */
        @Test
        public void testmybatis() throws Exception{
            //加载核心配置文件
            String resource="sqlMapConfig.xml";
            InputStream in=Resources.getResourceAsStream(resource);
            //创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            //创建SqlSession
            SqlSession sqlSession=sqlSessionFactory.openSession();
            User user = sqlSession.selectOne("test.findUserById", "1");
            
            System.out.println(user);
        }

    User.xml

    <mapper namespace="test">
        <!-- 通过id查询用户 -->
        <select id="findUserById" parameterType="String" resultType="com.javaweb.mybatis.model.User">
            select * from mybatis_user where id= #{v}
        </select>
    </mapper>

    (2)根据用户名模糊查询用户列表

    /*
         * 根据用户名模糊查询用户列表
         */
        @Test
        public void testmybatis2() throws Exception{
            //加载核心配置文件
            String resource="sqlMapConfig.xml";
            InputStream in=Resources.getResourceAsStream(resource);
            //创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            //创建SqlSession
            SqlSession sqlSession=sqlSessionFactory.openSession();
            List<User> userlist = sqlSession.selectList("test.findUserByUserName", "王");
            
            for(User user2 :userlist){
                System.out.println(user2);
            }
        }

    User.xml

    <!-- 根据用户名模糊查询用户列表 
        #{}表示占位符          select * from mybatis_user where id= ? 
        ${}表示字符串拼接  select * from mybatis_user where username like
        -->
        <select id="findUserByUserName" parameterType="String" resultType="com.javaweb.mybatis.model.User">
            select * from mybatis_user where username like '%${value}%'
        </select>

    (3)添加用户

    /*
         * 添加用户
         */
        @Test
        public void testmybati3() throws Exception{
            //加载核心配置文件
            String resource="sqlMapConfig.xml";
            InputStream in=Resources.getResourceAsStream(resource);
            //创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            //创建SqlSession
            SqlSession sqlSession=sqlSessionFactory.openSession();
            
            //执行sql语句
            User user =new User();
            user.setId("4");
            user.setUserName("李四");
            user.setUserAge("22");
            user.setUserSex("男");
            user.setUserAddress("芜湖");
            int i = sqlSession.insert("test.addUser",user);
            sqlSession.commit();
        }

    User.xml

    <!-- 添加用户 -->
        <insert id="addUser" parameterType="com.javaweb.mybatis.model.User">
            insert into mybatis_user (id,userName,userSex,userAge,userAddress)
            values(#{id},#{userName},#{userSex},#{userAge},#{userAddress})
        </insert>

    (4)更新用户

    /*
         * 更新用户
         */
        @Test
        public void testmybati4() throws Exception{
            //加载核心配置文件
            String resource="sqlMapConfig.xml";
            InputStream in=Resources.getResourceAsStream(resource);
            //创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            //创建SqlSession
            SqlSession sqlSession=sqlSessionFactory.openSession();
            
            //执行sql语句
            User user =new User();
            user.setId("2");
            user.setUserName("张三2");
            user.setUserAge("22");
            user.setUserSex("男");
            int i = sqlSession.update("test.updateUserById",user);
            sqlSession.commit();
        }

    User.xml

    <!-- 更新用户 -->
        <update id="updateUserById" parameterType="com.javaweb.mybatis.model.User">
            update mybatis_user
            set username= #{userName},userAge = #{userAge},userSex =#{userSex}
            where id = #{id}
        </update>

    (5)删除用户

    /*
         * 删除用户
         */
        @Test
        public void testmybati5() throws Exception{
            //加载核心配置文件
            String resource="sqlMapConfig.xml";
            InputStream in=Resources.getResourceAsStream(resource);
            //创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
            //创建SqlSession
            SqlSession sqlSession=sqlSessionFactory.openSession();
            
            //执行sql语句
            User user=new User();
            user.setId("4");
            int i = sqlSession.delete("test.deleteUserById",user);
            sqlSession.commit();
        }

    User.xml

    <!-- 删除用户 -->
        <delete id="deleteUserById" parameterType="String">
            delete from mybatis_user
            where id = #{id}
        </delete>

        

  • 相关阅读:
    第三篇:一个Spark推荐系统引擎的实现
    第二篇:使用Spark对MovieLens的特征进行提取
    第一篇:使用Spark探索经典数据集MovieLens
    第十一篇:Map/Reduce 工作机制分析
    docker 导入导出镜像
    pycharm激活
    jenkins + sonar 安装配置
    jenkins webhook 配置
    python3 学习
    Kubernetes 详解
  • 原文地址:https://www.cnblogs.com/FanJava/p/8330104.html
Copyright © 2011-2022 走看看