zoukankan      html  css  js  c++  java
  • mybatis小结-001

    代码不能直接copy运行,有些内容是为了说明知识点

    1,sqlMqpConfig.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>
    
        <!-- 引入外部属性文件 -->
        <properties resource="jdbc.properties" />
        
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driverClassName}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
                
                <!-- 
                <dataSource type="POOLED">
                    <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                    <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
                    <property name="username" value="scott"/>
                    <property name="password" value="tiger"/>
                </dataSource>
                 -->
            </environment>
        </environments>
        
        <!-- 指定映射文件或映射类 -->
        <mappers>
            <mapper resource="sqlMap/emp.xml"/>
        </mappers>
        
    </configuration>

    2,log4j.properties

    #在开发环境下,日志级别要设置成DEBUG,生产环境设置成info或error
    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=%d{HH:mm:ss,SSS} [%c] - %m%n

    3, jdbc.properties

    jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
    jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
    jdbc.username=scott
    jdbc.password=tiger

    4, Emp.java

    package com.mybatis.entity;
    
    public class Emp {
    
        private String ename;
        
        private int empno;
        
        private String job;
    
        public String getEname() {
            return ename;
        }
    
        public void setEname(String ename) {
            this.ename = ename;
        }
        
        @Override
        public String toString(){
            return "Emp [ ename = " + ename + "; empno = " + empno + "]";
            
        }
        
        public Emp(int empno, String ename, String job){
            
            super();
            this.empno = empno;
            this.ename = ename;
            this.job = job;
        }
    
        public int getEmpno() {
            return empno;
        }
    
        public void setEmpno(int empno) {
            this.empno = empno;
        }
    
        public String getJob() {
            return job;
        }
    
        public void setJob(String job) {
            this.job = job;
        }
    }

    5, emp.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="test">
    
    
        <!-- #{id}如果传入参数是简单类型,名称任意 -->
        <!-- ${}表示拼接字符串,将接收到的参数内容不加修饰拼接到sql中
            会引起sql注入
            ${value}:接收输入参数内容,如果是简单类型,只能使用${value}
         -->
        <select id="findEmpByEmpNo" parameterType="int" resultType="com.mybatis.entity.Emp">
            select * from emp where empno =#{empno}
        </select>
        
        <select id="findEmpByJob" parameterType="java.lang.String" resultType="com.mybatis.entity.Emp">
            select ename from emp where job =#{job}
        </select>
        
        <!-- 模糊查询 -->
        <select id="findByName" parameterType="java.lang.String", resultType="com.mybatis.entity.Emp">
            select * from emp where empno like '%${value}%'
        </select>
        
        <!-- 输入类型参数是pojo,mybatis通过OGNL获取对象属性值 
            //比如java中:System.out.println(emp.getID());
        // 检索时提交事务
                //sqlSession.commit();
                -->
        <insert id="save" parameterType="com.mybatis.entity.Emp">
            <!-- 将插入数据的主键返回(比如自增主键时),返回到user对象中
            SELECT LAST_INSERT_ID():得到insert进去记录的主键值,只适用于自增主键
            注:单独使用时返回0
            keyProperty:将查询到的主键值设置到parameterType指定的对象的那个属性中
            order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说
             -->
             <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
                 SELECT LAST_INSERT_ID()
             </selectKey>
             
             <!-- 使用mysql的uuid()函数生成主键 
             执行过程:先使用uuid()获得主键,再将主键设置到user对象的id中
             其次在insert执行时,从user对象中取得id属性
             -->
             
             <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
                 SELECT UUID()
             </selectKey>
             《此时需要传入id
             insert into emp(id,empno,ename,job) values (#{id},#{empno},#{ename},#{job})
            insert into emp(empno,ename,job) values (#{empno},#{ename},#{job})
        </insert>
        
        <update id="update" parameterType="com.mybatis.entity.Emp">
            update emp set ename=#{ename} where empno=#{empno}
        </update>
        
        <delete id="delete" parameterType="int">
            delete from emp where empno=#{empno}
        </delete>    
    
    </mapper>
        

    6, MybatisService.java

    public class MybatisService {
        
        @Test
        public void findEmpByJobTest(){
            
            //mybatis 配置文件
            String resource = "SqlMapConfig.xml";
            InputStream inputStream = null;
            SqlSession  sqlSession = null;
            
            try {
                // 使用MyBatis提供的Resources类加载myBatis的配置文件(它也加载相关联的映射文件)
                inputStream = Resources.getResourceAsStream(resource);
                
                //构建sqlSession工厂
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                // 创建能执行映射文件中sql的sqlSession
                sqlSession = sqlSessionFactory.openSession();
                
                // Emp emp = sqlSession.selectOne("test.findEmpByEmpNo", 7369);
                List<Emp> emp = sqlSession.selectList("test.findEmpByJob", "CLERK");
                //System.out.println(emp.toString());
                
                // 更新时时提交事务
                //sqlSession.insert("test.save", emp);
                //sqlSession.commit();
                //System.out.println(emp.getID());
                
                
                System.out.println(emp);
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    
    }

    7, 另外

    非自增主键返回(使用uuid)
    使用mysql的uuid()函数生成主键,需要修改表中id类型为String
    执行思路:
    先通过uuid查到主键,将主键输入到insert语句中
    执行uuid语句顺序在insert前

  • 相关阅读:
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 120. Triangle
    Leetcode 26. Remove Duplicates from Sorted Array
    Leetcode 767. Reorganize String
    Leetcode 6. ZigZag Conversion
    KMP HDU 1686 Oulipo
    多重背包 HDU 2844 Coins
    Line belt 三分嵌套
    三分板子 zoj 3203
    二分板子 poj 3122 pie
  • 原文地址:https://www.cnblogs.com/ysloong/p/6399519.html
Copyright © 2011-2022 走看看