zoukankan      html  css  js  c++  java
  • mybatis iBatis

    (1)mybatis是什么?

    开源的持久层框架。
    jdbc        代码繁琐                sql 性能好<br/>
    hibernate   代码简洁 不用写sql 性能不好<br/>
    mybatis     代码较简洁 要写sql 性能可以
    

    (2)使用mybatis

    1.导包。 mybatis,ojdbc
    2.添加mybatis配置文件。
    3.写实体类。
    注:实体类的属性名与表的字段表要求一样。大小写不做要求。
    4.写映射文件。
    注:修改配置文件,指定映射文件的位置。
    5.调用SqlSession提供的方法来访问数据库。

    (3)基本原理

    11

    ------------------------------------------------------------------------------------

    <?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration             PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"            "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
    <configuration>
        <environments default="environment">
            <environment id="environment">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <property name="driver" 
                        value="oracle.jdbc.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="entity/EmpMapper.xml" />
    
        </mappers>
    </configuration>
    package entity;
    
    public class Emp {
        private Integer id;
        private String name;
        private Double age;
        
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Double getAge() {
            return age;
        }
        public void setAge(Double age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "Emp [id=" + id + ", name=" + name + ", age=" + age + "]";
        }
        
        
    }
    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
     "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    <mapper namespace="test">
        <insert id="save" parameterType="entity.Emp">
            insert into emps values(seq_emps.nextval,#{name},#{age})
        </insert>
        
        <!-- id:要求唯一。resultType:返回的数据类型。parameterType:参数类型 -->
        <select id="findAll" resultType="entity.Emp">
            select * from emps
        </select>
        
        <select id="findById" parameterType="int" resultType="entity.Emp">
            select * from emps where id = #{id1}
        </select>
    
    </mapper>
    package test;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Before;
    import org.junit.Test;
    
    import entity.Emp;
    
    public class TestCase {
        private SqlSession session;
        @Before
        public void init() {
            SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
            SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
            session = ssf.openSession();
        }
        
        @Test
        public void test1() {
            Emp emp = new Emp();
            emp.setName("Eric");
            emp.setAge(new Double(22));
            session.insert("test.save",emp);
            session.commit();
            session.close();
        }
        
        @Test
        public void test2() {
            List<Emp> emps = session.selectList("test.findAll");
            System.out.println(emps);
            session.close();
        }
        
        @Test
        public void test3() {
            List<Emp> emps = session.selectList("test.findById",2);
            System.out.println(emps);
            session.close();
        }
    }

    (4)返回Map类型的结果

    13

    1314

    (5)实体类的

    方法1. select id empId from emps
    方法2.使用resultMap

    package entity;
    
    public class Emp2 {
        private Integer empId;
        private String name;
        private Double age;
        public Integer getEmpId() {
            return empId;
        }
        public void setEmpId(Integer empId) {
            this.empId = empId;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Double getAge() {
            return age;
        }
        public void setAge(Double age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "Emp2 [empId=" + empId + ", name=" + name + ", age=" + age + "]";
        }
        
    }
    <!-- 使用ResultMap解决表的字段名和实体类属性名不一致的情况 -->
        <select id="findById3" parameterType="int" resultMap="emp2Map">
            select * from emps where id = #{id1}
        </select>
        <!-- 处理表的字段名与实体类的属性名的对应关系。 -->
        <resultMap type="entity.Emp2" id="emp2Map">
            <result property="empId" column="id"/>
        </resultMap>
    @Test
        public void test7() {
            List<Emp> emps = session.selectList("test.findById3",2);
            System.out.println(emps);
            session.close();
        }

    (1)Mapper映射器

    符合映射文件的接口。
    注:mybatis会自动实现一个符合该接口要求的对象。

    要求:

    a.接口方法的名称与映射文件中的sql的id要一致。
    b.方法的参数类型要与映射文件中的parameterType一致。
    c.方法的返回类型要与映射文件当中的resultType一致。
    此外,映射文件的namespace必须等于Mapper映射器的全限定名。

    (1)Mapper映射器

    符合映射文件的接口。
    注:mybatis会自动实现一个符合该接口要求的对象。

    要求:

    a.接口方法的名称与映射文件中的sql的id要一致。
    b.方法的参数类型要与映射文件中的parameterType一致。
    c.方法的返回类型要与映射文件当中的resultType一致。
    此外,映射文件的namespace必须等于Mapper映射器的全限定名。

    <?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE configuration             PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"            "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
    <configuration>
        <environments default="environment">
            <environment id="environment">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <property name="driver" 
                        value="oracle.jdbc.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="entity/EmpMapper.xml" />
    
        </mappers>
    </configuration>
    package dao;
    
    import entity.Emp;
    
    /**
     * Mapper映射器。
     *
     */
    public interface EmpDAO {
        public void save(Emp emp);
        public Emp findById(int id);
    }
    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
     "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    <mapper namespace="dao.EmpDAO">
        <insert id="save" parameterType="entity.Emp">
            insert into emps values(seq_emps.nextval,#{name},#{age})
        </insert>
        
        <!-- id:要求唯一。resultType:返回的数据类型。parameterType:参数类型 -->
        <select id="findAll" resultType="entity.Emp">
            select * from emps
        </select>
        
        <select id="findById" parameterType="int" resultType="entity.Emp">
            select * from emps where id = #{id1}
        </select>
        
        <!-- 使用ResultMap解决表的字段名和实体类属性名不一致的情况 -->
        <select id="findById3" parameterType="int" resultMap="emp2Map">
            select * from emps where id = #{id1}
        </select>
        <!-- 处理表的字段名与实体类的属性名的对应关系。 -->
        <resultMap type="entity.Emp2" id="emp2Map">
            <result property="empId" column="id"/>
        </resultMap>
    
    </mapper>
    package test;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Before;
    import org.junit.Test;
    
    import dao.EmpDAO;
    import entity.Emp;
    
    public class TestCase {
        private SqlSession session;
        @Before
        public void init() {
            SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
            SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
            session = ssf.openSession();
        }
        @Test
        /**
         * getMapper方法返回一个符合Mapper映射器(EmpDAO)要求的对象。
         */
        public void test1() {
            EmpDAO dao = session.getMapper(EmpDAO.class);
            Emp emp = new Emp();
            emp.setName("Johnson");
            emp.setAge(new Double(22));
            dao.save(emp);
            session.commit();
            session.close();
        }
        
        @Test
        public void test2() {
            EmpDAO dao = session.getMapper(EmpDAO.class);
            Emp emp = dao.findById(4);
            System.out.println(emp);
        }
        
    }
  • 相关阅读:
    捡到一本<C++ Reference>
    题目1008:最短路径问题
    题目1014:排名
    题目1080:进制转换
    题目1081:递推数列
    题目1086:最小花费
    题目1076:N的阶乘
    题目1035:找出直系亲属
    在Mac上搭建Jenkins环境
    获取鼠标点击UGUI,先对于特定物体的相对坐标
  • 原文地址:https://www.cnblogs.com/menbozg/p/11489486.html
Copyright © 2011-2022 走看看