关于mybatis+maven基本知识掌握总结

首先这次学习mybatis,得先下载idea软件。maven在idea上好操作点,破解方案自行百度。这里暂不详细介绍。

当然学习mybatis框架需要一定基础,对于jdbc+mysql底层实现有一定认识,这里就不在讲解。

mybatis还是很简单的,网上教程一大堆,很可能你看一堆都比我的写得好。对于三天对mybatis的学习,在这里对知识点写下一个总结,不然后面硬盘坏了,又没了。

链接:https://pan.baidu.com/s/1qp44GPp7xgCFjr_y9jcnXw    提取码:kecl 
对于mybatis。ssh框架不能写sql,但是后期不能优化,ssm框架可以优化sql,对于性能好一些。

  • 简单mybatis

 这是最初的练习,可能注释有问题,但是后面的代码就纠正过来了。

为了更好的xml分离,就创建了一个文件夹,然后转成编译包,在再下面创建相同的mapper包。

package org.lisonglin.entity;

public class Student {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
<?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>
    <settings>
        <!-- 对数据库与属性不一致,自动转换 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
        <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/stus"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 调用dao层 -->
        <mapper resource="org/lisonglin/mapper/StudentMapper.xml"/>
    </mappers>
</configuration>
package org.lisonglin.mapper;

import org.apache.ibatis.annotations.Param;
import org.lisonglin.entity.Student;

public interface StudentMapper {
    Student get(int id);
    void insert(Student stu);
    void insertInfo(@Param("name") String name, @Param("age") int age);
}
<?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="org.lisonglin.mapper.StudentMapper">
    <select id="get" resultType="org.lisonglin.entity.Student">
        select * from student where id=#{id}
    </select>
    <insert id="insert">
        insert into student values(null,#{name},#{age})
    </insert>
    <insert id="insertInfo">
        insert into student values(null,#{name},#{age})
    </insert>
</mapper>
package org.lisonglin.test;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.lisonglin.entity.Student;
import org.lisonglin.mapper.StudentMapper;

import java.io.IOException;
import java.io.InputStream;


public class TestMyBatis {

    @Test
    public void test(){
        InputStream is=null;
        try {
            //获取src下全局配置文件的输入流
            is = Resources.getResourceAsStream("mybatis-config.xml");
            //获取SqlSessionFactory对象
            SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = factory.openSession();
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
//            Student student = mapper.get(1);
//            System.out.print(student);
//            Student s=new Student();
//            s.setName("bb");
//            s.setAge(12);
//            mapper.insert(s);
            mapper.insertInfo("cc",13);
            //手动提交
            sqlSession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
  • 进一步学习mybatis

其中有原生DAO的写法,用于理清mybatis的实现思路,还有就是因为老师说注解方式耦合性不高,就没有继续完成相应功能。不多说看下面代码。

package org.lisonglin.entity;

public class Student {
    private int id;
    private String sName;
    private int age;
    public final static String MYBATIS_CONFIG_FILE="mybatis-config2.xml";

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getsName() {
        return sName;
    }

    public void setsName(String sName) {
        this.sName = sName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", sName='" + sName + '\'' +
                ", age=" + age +
                '}';
    }

    public Student(int id, String sName, int age) {
        this.id = id;
        this.sName = sName;
        this.age = age;
    }


    public Student() {
    }
}
<?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"></properties>
    <settings>
        <!--把数据中的下划线改为驼峰命名法-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <!-- 别名 -->
        <!--<typeAlias type="org.lisonglin.entity.Student" alias="Student"></typeAlias>-->
        <!-- 直接导包 -->
        <package name="org.lisonglin.entity"></package>
    </typeAliases>
    <!-- 配置坏境变量,可以配置多个,默认值与id一致 -->
   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC"></transactionManager><!--事务-->
           <dataSource type="POOLED"><!-- 数据源  连接池POOLED -->
               <property name="driver" value="${jdbc.driver}"/>
               <property name="url" value="${jdbc.url}"/>
               <property name="username" value="${jdbc.username}"/>
               <property name="password" value="${jdbc.password}"/>
           </dataSource>
       </environment>
   </environments>
    <!--配置映射文件-->
    <mappers>
        <!--基于XML配置文件-->
        <!--<mapper resource="org/lisonglin/mapper/StudentMapper.xml"/>-->
        <package name="org.lisonglin.mapper"></package>
    </mappers>
</configuration>
package org.lisonglin.mapper;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.lisonglin.entity.Student;

import java.util.List;

public interface StudentMapper {
    /**
     * XML配置方式
     * @param id
     * @return
     */
    Student get(int id);
    void insert(Student stu);
    void insertInfo(@Param("name") String name, @Param("age") int age);
    List<Student> getAll();
    int insertStudentCacheId(Student stu);
    List<Student> getByName(@Param("key") String key);
    List<Student> getByIds(@Param("ids") int ... ids);
    List<Student> getStudents(Student stu);
    /**
     * 注解方式(代码耦合性不高,不推荐)
     * @param stu
     * @return
     */
    @Select("insert into stu(id,s_name,age) values(null,#{name},#{age})")
    public int add(Student stu);
}
<?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="org.lisonglin.mapper.StudentMapper">
    <!-- 通用sql -->
    <sql id="selectInfo">
        select * from stu
    </sql>
    <select id="getById" resultType="Student" parameterType="int">
        <!-- 引入通用sql -->
       <include refid="selectInfo"></include>
       where id=#{id}
    </select>
    <select id="getStudents" resultType="Student">
        <include refid="selectInfo"></include>
        <!-- 条件查询,如果没有符合条件,那么sql中的and会自动去掉 -->
        <where>
            <!-- 判断中属性是bean中的命名 -->
            <if test="sName != null">
                and s_name = #{sName}
            </if>
            <if test="age!=0">
                and age = #{age}
            </if>
        </where>
    </select>
    <select id="getByIds" resultType="Student">
        <include refid="selectInfo"></include>
        <where>
            <!--<foreach collection="ids" open="id in (" close=")" separator="," item="id">-->
                <!--id=#{id}-->
            <!--</foreach>-->
            <foreach collection="ids" item="id" separator="or">
                id=#{id}
            </foreach>
        </where>
    </select>
    <select id="get" resultType="Student" parameterType="int">
        select * from stu where id=#{id}
    </select>
    <insert id="insert">
        insert into stu values(null,#{name},#{age})
    </insert>
    <insert id="insertInfo">
        insert into stu values(null,#{name},#{age})
    </insert>
    <select id="getAll" resultType="Student">
        select * from stu
    </select>
    <!-- 查询出增加的主键(方法一) -->
    <insert id="insertStudentCacheId" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
        insert into stu values(null,#{sName},#{age})
    </insert>
    <!-- 方法二 -->
    <insert id="insertStudentId">
          <selectKey keyProperty="id" keyColumn="id" order="AFTER" resultType="int">
              <!-- 查询自增id (方法一) -->
              select last_insert_id()
              <!--方法二-->
              <!--select @@identity-->
          </selectKey>
         insert into stu values(null,#{sName},#{age})
    </insert>
    <select id="getByName" resultType="Student">
        <!-- ${} 拼接sql #{}  占位符 -->
        <!-- 推荐使用这种 -->
        <!-- select * from stu where s_name like '%' #{key} '%' -->
        <bind name="new_key" value="'%'+key+'%'"></bind>
        <include refid="selectInfo"></include>
        where s_name like #{new_key}
        <!-- select * from stu where s_name like concat('%',#{key},'%') -->
        <!-- 这种不建议使用,这种使用statement查询方式,有sql注入风险 -->
        <!-- select * from stu where s_name like '%${key}%' -->
    </select>

</mapper>
package org.lisonglin.servlet;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.lisonglin.entity.Student;
import org.lisonglin.mapper.StudentMapper;

import java.io.IOException;
import java.io.InputStream;

public class DataUtil {
    private static SqlSessionFactory sqlSessionFactory;

    public static StudentMapper getStudentMapper(){
        InputStream is=null;
        try {
            is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = build.openSession();
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
            return  mapper;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  null;
    }

    public static SqlSessionFactory getSqlSessionFactory(){
        InputStream is=DataUtil.class.getClassLoader().getResourceAsStream(Student.MYBATIS_CONFIG_FILE);
        return new SqlSessionFactoryBuilder().build(is);
    }

    /**
     * @param autoCommit
     *      true:表示创建的SqlSession对象在执行完SQL之后自动提交事务
     *      false:表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用SqlSession.commit()提交事务
     * @return
     */
    public static SqlSession getSqlSession(boolean autoCommit){
        return getSqlSessionFactory().openSession(autoCommit);
    }

    public static SqlSession getSqlSession(){
        return getSqlSessionFactory().openSession();
    }

}
package org.lisonglin.test;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.lisonglin.dao.StudentImpl;
import org.lisonglin.entity.Student;
import org.lisonglin.mapper.StudentMapper;
import org.lisonglin.servlet.DataUtil;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

public class MyTest {
    private SqlSessionFactory sqlSessionFactory;

    @Test
    public void getStudentByAgeOrNames(){
        StudentMapper studentMapper = DataUtil.getStudentMapper();
        Student student=new Student();
        student.setAge(20);
        System.out.println(student.toString());
        List<Student> studentByAgeOrName = studentMapper.getStudents(student);
        System.out.println(studentByAgeOrName);
    }

    @Test
    public void getByIdsStudent(){
        StudentMapper studentMapper = DataUtil.getStudentMapper();
        List<Student> byIds = studentMapper.getByIds(1, 2, 3);
        System.out.println(byIds);
    }

    @Test
    public void getByNameStu(){
        StudentMapper studentMapper = DataUtil.getStudentMapper();
        List<Student> a = studentMapper.getByName("a");
        System.out.println(a);
    }

    @Test
    public void getMapperAll(){
        StudentMapper sqlSession = DataUtil.getStudentMapper();
        List<Student> all = sqlSession.getAll();
        System.out.print(all.toString());
    }

    /**
     * mybatis代理模式
     */
    @Test
    public void getMapperMybatis(){
        StudentMapper sqlSession = DataUtil.getStudentMapper();
        Student student = sqlSession.get(1);
        System.out.print(student);
    }

    @Test
    public void insertGetId(){
        StudentMapper studentMapper = DataUtil.getStudentMapper();
        Student stu=new Student();
        stu.setAge(12);
        stu.setsName("aaa");
        int i = studentMapper.insertStudentCacheId(stu);
        System.out.println(i);
        System.out.println(stu.getId());
    }

    /**
     * 原生Dao开发
     */
    @Test
    public void getDaoMyBatis(){
        String resource = "mybatis-config.xml";
        Reader reader = null;
        try {
            reader = Resources.getResourceAsReader(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        StudentMapper studentMapper=new StudentImpl(sqlSessionFactory);
        Student student = studentMapper.get(2);
        System.out.print(student);
    }
}
  • 完整mybatis学习

这在最后是maven+mybatis,其中有自动生成generatorConfig插件,不过这个后面用熟悉了再用这个插件吧。

还有log4j日志打印,一级缓存和二级缓存,数据库多表连接,一对一映射和一对多映射。还有一个懒加载,分页

pagehelper的使用。

首先maven对jar包有一个相当于中央仓库的作用,减少项目的没用的东西,因为我们写的以前项目,很多东西其实只有一点点,而其他文件占比相当大,maven的好处就是把jar包放在一个文件夹下,用的时候就导出来用。

maven项目创建太晚就不写了,自行百度把。

groupId:相当于项目别名把
artifactId:项目名
dependencies:配置jar包

在pom.xml中写相关jar包的xml配置,在这个网站搜索https://mvnrepository.com/

复制到pom.xml的

在ssm下创建一个web项目,相当于一个版块,然后在点击右键设置Add Framework .....添加pom.xml,然后在这个pom.xml中添加

<dependency>
    <groupId>java</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

相对你的总项目的名字,在artifactId中添加ssm后,它会自动添加。

dependencies标签对里,它会自动下载jar包。
package org.lisonglin.entity;

import java.io.Serializable;
import java.util.List;

public class Teacher implements Serializable {
    private int id;
    private String name;
    private int age;
    private Wifes wife;
    private List<User> user;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Wifes getWife() {
        return wife;
    }

    public void setWife(Wifes wife) {
        this.wife = wife;
    }

    public List<User> getUser() {
        return user;
    }

    public void setUser(List<User> user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", wife=" + wife +
                ", user=" + user +
                '}';
    }
}
package org.lisonglin.entity;

import java.io.Serializable;

public class User implements Serializable {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package org.lisonglin.entity;

import java.io.Serializable;

public class Wifes implements Serializable {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Wifes{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
package org.lisonglin.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.lisonglin.mapper.UserMapper;

import java.io.IOException;
import java.io.InputStream;

public class MyBatis {
    public static SqlSession getSqlSession(){
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            return sqlSession;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
<?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"></properties>
    <settings>
        <!--把数据中的下划线改为驼峰命名法-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--二级缓存开关-->
        <setting name="cacheEnabled" value="true"></setting>
        <!--允许返回多个结果集-->
        <setting name="multipleResultSetsEnabled" value="true"></setting>
        <!--日志-->
        <setting name="logImpl" value="LOG4J"></setting>
        <!-- 延迟加载总开关 -->
        <setting name="lazyLoadingEnabled" value="false"/>
        <!-- 侵入懒加载,设置为false则按需加载,否则会全部加载 -->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>
    <typeAliases>
        <!-- 别名 -->
        <!--<typeAlias type="org.lisonglin.entity.Student" alias="Student"></typeAlias>-->
        <!-- 直接导包 -->
        <package name="org.lisonglin.entity"></package>
    </typeAliases>
    <!-- 配置分页插件 -->
    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!--&lt;!&ndash; 设置方言 &ndash;&gt;-->
            <!--<property name="dialect" value="mysql"/>-->
            <!--&lt;!&ndash;设置为true时,使用RowBounds分页会进行count查询 &ndash;&gt;-->
            <!--<property name="offsetAsPageNum" value="false" />-->
            <!--&lt;!&ndash; 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 &ndash;&gt;-->
            <!--<property name="rowBoundsWithCount" value="true" />-->
        </plugin>
    </plugins>
    <!-- 配置坏境变量,可以配置多个,默认值与id一致 -->
   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC"></transactionManager><!--事务-->
           <dataSource type="POOLED"><!-- 数据源  连接池POOLED -->
               <property name="driver" value="${jdbc.driver}"/>
               <property name="url" value="${jdbc.url}"/>
               <property name="username" value="${jdbc.username}"/>
               <property name="password" value="${jdbc.password}"/>
           </dataSource>
       </environment>
   </environments>
    <!--配置映射文件-->
    <mappers>
        <!--基于XML配置文件-->
        <!--<mapper resource="org/lisonglin/mapper/StudentMapper.xml"/>-->
        <package name="org.lisonglin.mapper"></package>
    </mappers>
</configuration>
package org.lisonglin.mapper;

import org.lisonglin.entity.Teacher;

import java.util.List;

public interface TeacherMapper {
    Teacher getTeacher(int id);
    Teacher get(int id);
    List<Teacher> getAll();
    List<Teacher> getAll1();
}
package org.lisonglin.mapper;

import org.lisonglin.entity.Teacher;
import org.lisonglin.entity.User;

import javax.print.Doc;
import java.util.List;

public interface UserMapper {
    List<User> getByUserId(int teacherid);
    List<User> getAllUser();
}
package org.lisonglin.mapper;

import org.lisonglin.entity.Wifes;

public interface WifesMapper {
    Wifes getByWifesId(int teacherid);
}
<?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="org.lisonglin.mapper.TeacherMapper">
    <!--延迟加载-->
    <resultMap id="selectTeacher" type="Teacher">
        <id property="id" column="id"></id>
        <!--一对一映射-->
        <association property="wife" column="id" select="org.lisonglin.mapper.WifesMapper.getByWifesId" fetchType="lazy">
        </association>
        <!--一对多映射-->
        <collection property="user" column="id" select="org.lisonglin.mapper.UserMapper.getByUserId" fetchType="lazy"></collection>
    </resultMap>
    <select id="getTeacher" resultMap="selectTeacher">
        select * from teachers  where id=#{id}
    </select>
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>
    <resultMap id="selectClass" type="Teacher">
        <id column="tid" property="id"></id>
        <result column="tname" property="name"></result>
        <result column="tage" property="age"></result>
        <!--一对一映射-->
        <association property="wife" javaType="Wifes">
            <id column="wid" property="id"></id>
            <result column="wname" property="name"></result>
        </association>
        <!--一对多映射-->
        <collection property="user" ofType="User">
            <id column="uid" property="id"></id>
            <result column="uname" property="name"></result>
            <result column="uage" property="age"></result>
        </collection>
    </resultMap>
    <select id="get" resultMap="selectClass">
        select u.id uid,u.`name` uname,u.age uage,
            t.id tid,t.`name` tname,t.age tage,
            w.id wid,w.`name` wname
        from `user` u
          join teachers t
        on u.teacher=t.id
          join wifes w
        on t.wife=w.id
          where t.id=#{id}
    </select>

    <select id="getAll" resultMap="selectClass">
        select u.id uid,u.`name` uname,u.age uage,
            t.id tid,t.`name` tname,t.age tage,
            w.id wid,w.`name` wname
        from `user` u
          join teachers t
        on u.teacher=t.id
          join wifes w
        on t.wife=w.id
    </select>
    <select id="getAll1" resultMap="selectTeacher">
         select *   from teachers
    </select>
</mapper>
<?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="org.lisonglin.mapper.UserMapper">
    <select id="getAllUser" resultType="User">
        select * from user
    </select>
    <select id="getByUserId" resultType="User">
        select * from `user` where teacher=#{id}
    </select>
</mapper>
<?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="org.lisonglin.mapper.WifesMapper">
    <select id="getByWifesId" resultType="Wifes">
        select * from wifes where id=#{id}
    </select>

</mapper>
package org.lisonglin.test;

import com.github.pagehelper.PageHelper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.lisonglin.entity.Teacher;
import org.lisonglin.entity.User;
import org.lisonglin.mapper.TeacherMapper;
import org.lisonglin.mapper.UserMapper;
import org.lisonglin.util.MyBatis;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyTest {

    @Test
    public void test(){
        SqlSession sqlSession = MyBatis.getSqlSession();
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.get(1);
        System.out.println(teacher);
        SqlSession sqlSession1 = MyBatis.getSqlSession();
        TeacherMapper mapper1 = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher1 = mapper1.get(1);
        System.out.println(teacher1);
        sqlSession1.close();
    }

    @Test
    public void test2(){
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.get(1);
        System.out.println(teacher);
        sqlSession.close();
        SqlSession sqlSession1 = sqlSessionFactory.openSession();
        TeacherMapper mapper1 = sqlSession1.getMapper(TeacherMapper.class);
        Teacher teacher1 = mapper1.get(1);
        System.out.println(teacher1);
        sqlSession1.close();
    }

    @Test
    public void testGetLayz(){
        SqlSession sqlSession = MyBatis.getSqlSession();
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.getTeacher(2);
        System.out.println(teacher.getName());
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(teacher.getWife());
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(teacher.getUser());
    }

    @Test
    public void testPageHelper() {
        SqlSession sqlSession = MyBatis.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        PageHelper.startPage(1,3);
        List<User> all = mapper.getAllUser();
        System.out.println(all);
    }

    @Test
    public void testPageHelperAll(){
        SqlSession sqlSession = MyBatis.getSqlSession();
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        PageHelper.startPage(1,3);
        List<Teacher> all = mapper.getAll1();
        System.out.println(all);
    }
}

其他文件配置就不多写了,还有一个项目to,里面有自动生成javabean+mybatis的插件使用,ok!

猜你喜欢

转载自blog.csdn.net/qq_41520636/article/details/84146699
今日推荐