zoukankan      html  css  js  c++  java
  • mybatis学习成长之路(一)

      从小白开始学习,希望自己学习的过程可以帮助更多需要的人,参考网址:https://www.cnblogs.com/ysocean/p/7237499.html

        1、mybatis的jar包下载地址:https://github.com/mybatis/mybatis-3/releases

        2、浅谈mybatis # $区别:https://www.cnblogs.com/dato/p/7027949.html

      一、mybatis项目讲解

        1、项目架构:

          

        2、主配置文件: mybatis-configuration.xml  

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
     3 <configuration>
     4 <properties resource="properties/db.properties"></properties>
     5 <!--类型命名 -->
     6 <typeAliases>
     7     <!-- 
     8         <typeAlias alias="person" type="com.ys.bean.Person"></typeAlias>
     9      -->
    10     <package name="com.ys.bean"/>
    11 </typeAliases>
    12 
    13 
    14 <!-- 可以配置多个运行环境,但是每个 SqlSessionFactory 实例只能选择一个运行环境  
    15   一、development:开发模式
    16    二、work:工作模式-->
    17  <environments default="development">
    18  <!--id属性必须和上面的default一样  -->
    19     <environment id="development">
    20     <!--事务管理器
    21         一、JDBC:这个配置直接简单使用了 JDBC 的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围
    22         二、MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期
    23             比如 spring 或 JEE 应用服务器的上下文,默认情况下,它会关闭连接。然而一些容器并不希望这样,
    24             因此如果你需要从连接中停止它,就可以将 closeConnection 属性设置为 false,比如:
    25             <transactionManager type="MANAGED">
    26                 <property name="closeConnection" value="false"/>
    27             </transactionManager>
    28       -->
    29       <transactionManager type="JDBC"/>
    30     
    31       <!--dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象源  -->
    32       <dataSource type="POOLED">
    33         <property name="driver" value="${driver}"/>
    34         <property name="url" value="${url}"/>
    35         <property name="username" value="${username}"/>
    36         <property name="password" value="${password}"/>
    37       </dataSource>
    38     </environment>
    39   </environments>
    40   
    41     <mappers>
    42        <!-- 注册personMapper.xml文件,
    43        personMapper.xml位于com.ys.bean这个包下,所以resource写成com/ys/bean/personMapper.xml-->
    44        <mapper resource="com/ys/bean/personMapper.xml"/>
    45     </mappers>
    46 </configuration>

        3、数据库配置信息:db.properties

    1 driver=com.mysql.jdbc.Driver
    2 url=jdbc:mysql://localhost:3306/mybatisdemo
    3 username=root
    4 password=ROOT

        4、数据库实体类映射文件:personMapper.xml 

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="com.ys.bean.personMapper">
     6   <!-- 根据 pid 查询 person 表中的数据
     7        id:唯一标识符,此文件中的id值不能重复
     8        resultType:返回值类型,一条数据库记录也就对应实体类的一个对象
     9        parameterType:参数类型,也就是查询条件的类型
    10    -->
    11   <select id="selectPersonById"
    12             resultType="person" parameterType="int">
    13     <!-- 这里和普通的sql 查询语句差不多,对于只有一个查询条件后面的 #{pid}表示占位符,里面不一定要写pid,写啥都可以,但是不要空着;如果有多个查询条件,则要写pojo类里面的属性 -->
    14     select * from person where pid = #{pid}
    15   </select>
    16    
    17   <!-- 查询person 表所有数据 -->
    18   <select id="getAllPerson" resultType="person">
    19     select * from person
    20   </select>
    21    
    22   <!-- 根据id更新数据 -->
    23   <update id="updatePersonById" parameterType="person">
    24     update person set pname=#{pname},page=#{page} where pid = #{pid}
    25   </update>
    26    
    27   <!-- 向 person 表插入一条数据 -->
    28   <insert id="addPerson" parameterType="person" useGeneratedKeys="true" keyProperty="pid">
    29     insert into person(pname,page) values(#{pname},#{page})
    30   </insert>
    31    
    32   <!-- 根据 pid 删除数据 -->
    33   <delete id="deletePersonById" parameterType="int">
    34     delete from person where pid=#{pid}
    35   </delete>
    36    
    37   <!-- 多表关联查询 -->
    38    <!-- 1、映射学生对象的resultMap -->
    39    <resultMap type="student" id="studentResultMap" >
    40            <id property="id" column="id"/>
    41            <result property="name" column="name"/>
    42            <result property="sex" column="sex"/>
    43            <result property="age" column="age"/>
    44            <!-- 关联映射 -->
    45            <association property="clazz" column="class_id" javaType="com.ys.bean.Clazz" select="selectClazzWithId"></association>
    46    </resultMap>
    47    
    48    <!-- 根据班级id查询班级 -->
    49    <select id="selectClazzWithId" resultType="com.ys.bean.Clazz">
    50        select * from tb_clazz where id =#{id}
    51    </select>
    52    
    53    <!-- 查询所有学生信息 -->
    54    <select id="selectStudent" resultMap="studentResultMap">
    55        select * from tb_STUDENT;
    56    </select>
    57    
    58    <!-- 2、映射班级对象的resultMap  -->
    59    <resultMap id="clazzresultMap" type="com.ys.bean.Clazz" >
    60            <id property="id" column="id" />
    61            <result property="code" column="code" />
    62            <collection property="students" javaType="ArrayList" column="id" ofType="com.ys.bean.Student" select="selectStudentWithId"></collection>
    63    </resultMap>
    64    
    65    <!-- 根据班级id查询学生 -->
    66    <select id="selectStudentWithId" resultType="com.ys.bean.Student">
    67            select * from tb_STUDENT where class_id = #{id}
    68    </select>
    69    
    70    <!-- 查询所有班级信息 -->
    71    <select id="selectClazz" resultMap="clazzresultMap">
    72            select * from tb_clazz
    73    </select>
    74    
    75 </mapper>

        5、实体类

          (1)、Clazz

     1 package com.ys.bean;
     2 
     3 import java.util.List;
     4 
     5 
     6 public class Clazz {
     7     private Integer id;
     8     private String code;
     9     private List<Student> students;
    10     
    11     public Integer getId() {
    12         return id;
    13     }
    14     public void setId(Integer id) {
    15         this.id = id;
    16     }
    17     public String getCode() {
    18         return code;
    19     }
    20     public void setCode(String code) {
    21         this.code = code;
    22     }
    23     public List<Student> getStudents() {
    24         return students;
    25     }
    26     public void setStudents(List<Student> students) {
    27         this.students = students;
    28     }
    29     
    30     @Override
    31     public String toString() {
    32         return "Clazz [code=" + code + ", id=" + id + "]";
    33     }
    34 }

          (2)、Person

    package com.ys.bean;
     
    public class Person {
        private int pid;
        private String pname;
        private int page;
         
        public int getPid() {
            return pid;
        }
        public void setPid(int pid) {
            this.pid = pid;
        }
        public String getPname() {
            return pname;
        }
        public void setPname(String pname) {
            this.pname = pname;
        }
        public int getPage() {
            return page;
        }
        public void setPage(int page) {
            this.page = page;
        }
        @Override
        public String toString() {
            return "Person [pid=" + pid + ", pname=" + pname + ", page=" + page
                    + "]";
        }
    }

          (3)、Student

    package com.ys.bean;
    
    public class Student {
        private Integer id;
        private String name;
        private String sex;
        private Integer age;
        private Clazz clazz;
        
        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 String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
        public Clazz getClazz() {
            return clazz;
        }
        public void setClazz(Clazz clazz) {
            this.clazz = clazz;
        }
        
        @Override
        public String toString() {
            return "Student [age=" + age + ", clazz=" + clazz.toString() + ", id=" + id
                    + ", name=" + name + ", sex=" + sex + "]";
        }
        
        
    }

        6、测试代码

      1 package com.ys.test;
      2  
      3 import java.io.InputStream;
      4 import java.util.List;
      5  
      6 import org.apache.ibatis.session.SqlSession;
      7 import org.apache.ibatis.session.SqlSessionFactory;
      8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      9 import org.junit.Before;
     10 import org.junit.Test;
     11  
     12 import com.ys.bean.Clazz;
     13 import com.ys.bean.Person;
     14 import com.ys.bean.Student;
     15  
     16 public class MyBatisTest {
     17     SqlSession session;
     18      
     19     @Before
     20     public void beforeLoadXML(){
     21         //加载 mybatis 配置文件
     22         InputStream inputStream = MyBatisTest.class.getClassLoader().getResourceAsStream("mybatis-configuration.xml");
     23         //构建sqlSession的工厂
     24         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
     25         //根据 sqlSessionFactory 产生 session
     26         session = sqlSessionFactory.openSession();
     27     }
     28      
     29     //根据 pid 查询 person 表中的数据
     30     @Test
     31     public void testSelectById(){
     32         //这个字符串有 personMapper.xml 文件中 两个部分构成
     33         //<mapper namespace="com.ys.bean.personMapper"> 的 namespace 的值
     34         //<select id="selectPersonById" > id 值
     35         String statement = "com.ys.bean.personMapper"+".selectPersonById";
     36         Person p = session.selectOne(statement, 1);
     37         System.out.println(p);
     38         session.close();
     39     }
     40      
     41     //查询person 表所有数据
     42     @Test
     43     public void testGetAllPerson(){
     44         String statement = "com.ys.bean.personMapper"+".getAllPerson";
     45         List<Person> listPerson = session.selectList(statement);
     46         System.out.println(listPerson);
     47         session.close();
     48     }
     49      
     50     //根据id更新数据
     51     @Test
     52     public void updateById(){
     53         String statement = "com.ys.bean.personMapper.updatePersonById";
     54         Person p = new Person();
     55         p.setPid(1);
     56         p.setPname("aaa");
     57         p.setPage(11);
     58         session.update(statement, p);
     59         session.commit();
     60         session.close();
     61     }
     62      
     63     //向 person 表插入一条数据
     64     @Test
     65     public void addPerson(){
     66         String statement = "com.ys.bean.personMapper.addPerson";
     67         Person p = new Person();
     68         //由于我们设置了主键的自增长机制,故这里不需要手动设置 pid 的值
     69         //p.setPid(1);
     70         p.setPname("addd");
     71         p.setPage(22);
     72         session.insert(statement, p);
     73         session.commit();
     74         session.close();
     75     }
     76      
     77     //根据 pid 删除person 表中的数据
     78     @Test
     79     public void deletePersonById(){
     80         String statement = "com.ys.bean.personMapper.deletePersonById";
     81         session.delete(statement, 6);
     82         session.commit();
     83         session.close();
     84     }
     85     
     86     @Test
     87     public void selectStudent(){
     88         String statement = "com.ys.bean.personMapper.selectStudent";
     89         List<Student> student_list = session.selectList(statement);
     90         for(Student stu:student_list){
     91             System.out.println(stu.toString());
     92         }
     93         session.commit();
     94         session.close();
     95     }
     96     
     97     @Test
     98     public void selectClazz(){
     99         String statement = "com.ys.bean.personMapper.selectClazz";
    100         List<Clazz> student_list = session.selectList(statement);
    101         for(Clazz clazz:student_list){
    102             System.out.println(clazz.toString());
    103             List<Student> students = clazz.getStudents();
    104             for(Student stu:students){
    105                 System.out.println(stu.getId()+" "+stu.getName()+" "+stu.getSex());
    106             }
    107         }
    108         session.commit();
    109         session.close();
    110     }
    111     
    112 }

        7、数据库表的设计以及插入语句

     1 /**
     2 CREATE table tb_clazz(
     3         id int PRIMARY KEY AUTO_INCREMENT,
     4         code VARCHAR(18)
     5 );
     6 INSERT INTO tb_clazz(code) VALUES('J1601');
     7 INSERT INTO tb_clazz(code) VALUES('J1602');
     8 **/
     9 SELECT * FROM tb_clazz
    10 
    11 /**
    12 CREATE table tb_STUDENT(
    13         id int PRIMARY KEY AUTO_INCREMENT,
    14         NAME VARCHAR(18),
    15         sex CHAR(3),
    16         age INT,
    17         class_id INT,
    18         FOREIGN KEY(class_id) REFERENCES tb_clazz(id)
    19 );
    20 INSERT INTO tb_STUDENT(NAME,sex,age,class_id) VALUES('jack','男',22,1);
    21 INSERT INTO tb_STUDENT(NAME,sex,age,class_id) VALUES('rose','女',18,1);
    22 INSERT INTO tb_STUDENT(NAME,sex,age,class_id) VALUES('tom','男',25,2);
    23 INSERT INTO tb_STUDENT(NAME,sex,age,class_id) VALUES('mary','女',20,2);
    24 */
    25 SELECT * FROM tb_STUDENT
  • 相关阅读:
    过滤选择器——简单过滤选择器
    层次选择器
    选择器——2——基本选择器
    This is a secret
    iframe加载问题
    懒加载
    biubiubiu
    使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
    HTML中&nbsp; &ensp; &emsp; &thinsp;等6种空白空格的区别
    ASP.NET 4.0的ClientIDMode属性
  • 原文地址:https://www.cnblogs.com/ouyy/p/8861799.html
Copyright © 2011-2022 走看看