zoukankan      html  css  js  c++  java
  • Mabatis入门案例

     log4j.properties

    # Global logging configuration
    #u5728u5f00u53d1u9636u6bb5uff0cu8bbeu7f6eu4e3aDEBUGuff0cu5230u751fu4ea7u73afu5883u4e0au8bbeu7f6einfou6216erroru5c31u884cu4e86u3002
    log4j.rootLogger=DEBUG, stdout
    # Console output...
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    User.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配置将废除 -->
        <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/mybatis?characterEncoding=utf-8" />
                    <property name="username" value="root" />
                    <property name="password" value="mysql" />
                </dataSource>
            </environment>
        </environments>
        
        <!-- 加载mapper.xml -->
        <mappers>
            <!-- 指定classpath下的文件 -->
            <mapper resource="sqlmap/User.xml"/>
        </mappers>
    
    
    </configuration>
    <?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映射文件是以sql语句为单位进行配置,最终将sql语句封装到MappedStatement对象中
    namespace命名空间作用是更好对sql语句进行隔离,方便管理sql
    
    注意:后期讲mybatis的mapper代理开发方式时namespace有特殊的作用???
     -->
    <mapper namespace="test">
    
    <!-- 根据用户id查询一个用户信息 
    select:用于查询,主要配置sql语句、输入参数类型、输出结果类型
    最终该 select 标签 中所配置的内容会封装到MappedStatement对象,可以将该 select称为是一个Statement
    id:唯 一标识 namespace下的一个sql语句,将id称为Statement的id
    
    parameterType:指定输入参数的类型(简单类型、自定义pojo)
    #{}:表示一个占位符号,占位符号可以防止sql注入
    #{value}:value表示接收输入参数的值,如果接收的输入参数是简单类型,#{}里边可以写value或其它的名称
    resultType:将sql查询结果集映射成java对象
    将多个列的值映射到一个对象中,需要定义的pojo,resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射
    resultType 指定单条记录所映射的java对象
    
    -->
    <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
        SELECT id,username,birthday,sex,address  FROM USER WHERE id = #{id}
    </select>
    
    <!-- 
    根据用户名称模糊查询用户信息列表
    resultType:不管结果集记录的数量有多少,resutType指定单条记录所映射的java对象
    resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射
    ${}:表示一个sql拼接符号,相当于字符串的拼接:
    “SELECT * FROM USER WHERE username LIKE '%” + ${}表示的串 + “%'”
    ${}:如果接收输入参数是一个简单类型,${} 中只能写value
    
    ${}实现sql拼接是无法防止sql注入的。
    
     -->
     <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
         SELECT * FROM USER WHERE username LIKE '%${value}%'
     </select>
    
    <!-- 添加用户 
    需要输入参数是多个值,如果传入简单类型是无法满足要求。
    输入参数类型可以定义为pojo(cn.itcast.mybatis.po.User包括多个属性)
    #{}如何获取对象的值?
    #{}是通过OGNL读取对象的值,OGNL的表达式方式:属性.属性.属性。。。。直到把对象中的属性值读取过来 过止
    mysql数据库通过select LAST_INSERT_ID();获取自增主键的值,在insert语句执行之后去执行LAST_INSERT_ID()获取新记录的主键
    -->
    <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
        <!-- 
        keyProperty:将主键值设置到输入参数的哪个属性,设置到user的id属性中
        order:selectkey中的sql语句在insert语句执行的前或后,这里要设置成"AFTER"
        resultType:select LAST_INSERT_ID()查询出的值
         -->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            select LAST_INSERT_ID()
        </selectKey>
        insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
    </insert>
    
    <!-- 使用mysql的uuid生成主键 -->
    <!-- <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
        
        keyProperty:将主键值设置到输入参数的哪个属性,设置到user的id属性中
        order:select uuid()在insert执行之前去执行得到uuid作为主键,将主键值设置到user的属性中
        resultType:select uuid()查询出的值
        
        <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
            select uuid()
        </selectKey>
        insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address});
    </insert> -->
    
    <!-- 修改用户-->
    <update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
     update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
    </update>
    
    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="int">
        delete from user where id = #{id}
    </delete>
    
    </mapper>

     测试类

    public class MybatisFirst {
    
        // 根据用户id查询用户信息
        @Test
        public void testFindUserById() throws Exception {
    
            // mybatis全局配置文件
            String resource = "SqlMapConfig.xml";
    
            // 根据mybatis的全局配置文件构造 一个流
            InputStream inputStream = Resources.getResourceAsStream(resource);
    
            // 创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
    
            // 创建SqlSession会话
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            // 使用sqlSession查询用户
            // 第一个参数:statement的id,前边要加namespace
            // 第二个参数:输入的参数对象值
            // selectOne用于返回单个对象,如果sql查询返回一个列表(多个对象),如果使用selectOne报错
            User user = sqlSession.selectOne("test.findUserById", 1);
            System.out.println(user);
    
            // 关闭sqlsession
            sqlSession.close();
    
        }
    
        // 根据用户名称模糊查询用户信息
        @Test
        public void testFindUserByName() throws Exception {
    
            // mybatis全局配置文件
            String resource = "SqlMapConfig.xml";
    
            // 根据mybatis的全局配置文件构造 一个流
            InputStream inputStream = Resources.getResourceAsStream(resource);
    
            // 创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
    
            // 创建SqlSession会话
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            // 根据用户名称模糊查询
            // selectList用于 将sql查询结果映射成java对象 ,返回一个List<Object>
            // 1参数:statement的id(等于namespace+statement的id)
            // 2参数:输入参数值
            List<User> list = sqlSession.selectList("test.findUserByName", "张");
    
            System.out.println(list);
    
            // 关闭sqlsession
            sqlSession.close();
    
        }
    
        // 插入用户
        @Test
        public void testInsertUser() throws Exception {
    
            // mybatis全局配置文件
            String resource = "SqlMapConfig.xml";
    
            // 根据mybatis的全局配置文件构造 一个流
            InputStream inputStream = Resources.getResourceAsStream(resource);
    
            // 创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
    
            // 创建SqlSession会话
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            // 构造 输入参数,就是插入的用户信息
            User user = new User();
            user.setUsername("赵六");
            user.setBirthday(new Date());
            user.setAddress("北京");
            // 调用sqlSession插入用户
            sqlSession.insert("test.insertUser", user);
    
            System.out.println("新user的主键:" + user.getId());
    
            // 提交
            sqlSession.commit();
    
            // 关闭sqlsession
            sqlSession.close();
    
        }
    
        // 更新用户
        @Test
        public void testUpdateUser() throws Exception {
    
            // mybatis全局配置文件
            String resource = "SqlMapConfig.xml";
    
            // 根据mybatis的全局配置文件构造 一个流
            InputStream inputStream = Resources.getResourceAsStream(resource);
    
            // 创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
    
            // 创建SqlSession会话
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            // 构造 输入参数,就是更新的用户信息
            User user = new User();
            // 更新的用户信息中必须要有id
            user.setId(62);
            user.setUsername("赵六3");
            user.setBirthday(new Date());
            user.setAddress("郑州");
            // 调用sqlSession插入用户
            sqlSession.update("test.updateUser", user);
    
            // 提交
            sqlSession.commit();
    
            // 关闭sqlsession
            sqlSession.close();
    
        }
    
        // 删除用户
        @Test
        public void testDeleteUser() throws Exception {
    
            // mybatis全局配置文件
            String resource = "SqlMapConfig.xml";
    
            // 根据mybatis的全局配置文件构造 一个流
            InputStream inputStream = Resources.getResourceAsStream(resource);
    
            // 创建SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
    
            // 创建SqlSession会话
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            sqlSession.delete("test.deleteUser", 60);
            // 提交
            sqlSession.commit();
    
            // 关闭sqlsession
            sqlSession.close();
    
        }
    }
    public class User {
        
        private int id;
        private String username;// 用户姓名
        private String sex;// 性别
        private Date birthday;// 生日
        private String address;// 地址
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", sex=" + sex
                    + ", birthday=" + birthday + ", address=" + address + "]";
        }
        
        
    
    }
    user
  • 相关阅读:
    性能测试必备知识(10)- Linux 是怎么管理内存的?
    stat 命令家族(4)- 详解 iostat
    stat 命令家族(3)- 详解 mpstat
    stat 命令家族(2)- 详解 pidstat
    性能分析(6)- 如何迅速分析出系统 CPU 的瓶颈在哪里
    性能分析(5)- 软中断导致 CPU 使用率过高的案例
    实体类转xml
    运气一直好,就不只是运气了——记中学七年
    (数据科学学习手札93)利用geopandas与PostGIS进行交互
    JVM系列之一:内存区域和内存溢出
  • 原文地址:https://www.cnblogs.com/wwwzzz/p/8262931.html
Copyright © 2011-2022 走看看