myBatis

一,初识mybatis

1.声明对应表的实体类

package com.mybatis.bean;
public class Student {
    private String id;
    private String name;
    private int age;
    public Student(String id,String name,int age){
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public String getId() {
        return id;
    }
    public void setId(String 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;
    }
}

2.声明映射文件表StudentMapper.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="studentNameSpace">

    <!-- resultMap:表示实体类与映射表
         type:实体类全路径名
         id:为实体类与表的映射取一个唯一的编码
     -->
    <resultMap type="com.mybatis.bean.Student" id="studentMap">
        <!-- id标签:映射主键属性
             property:实体类的属性名
             column:表的字段名
         -->
        <id property="id" column="id"/>

        <!-- result标签:映射非主键的属性 -->
        <result property="name" column="name"/>

        <result property="age" column="age"/>
    </resultMap>
    <!-- 插入语句 
        parameterType:参数类型
    -->
    <insert id="add" parameterType="com.mybatis.bean.Student">
        insert into student(id,name,age) values(#{id},#{name},#{age});
    </insert>
</mapper>

3.Dao文件

public class StudentDao {

    public void add(Student student){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        sqlSession.insert("studentNameSpace.add",student);
        sqlSession.commit();
    }
}

4.MyBatisUtil文件

public class MyBatisUtil {
    private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
    private static SqlSessionFactory sqlSessionFactory;
    /**
     * 加载位于src/mybatis.xml配置文件
     */
    static{
        try {
            Reader reader = Resources.getResourceAsReader("mybatis.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    /**
     * 禁止外界通过new方法创建 
     */
    private MyBatisUtil(){}
    /**
     * 获取SqlSession
     */
    public static SqlSession getSqlSession(){
        //从当前线程中获取SqlSession对象
        SqlSession sqlSession = threadLocal.get();
        //如果SqlSession对象为空
        if(sqlSession == null){
            //在SqlSessionFactory非空的情况下,获取SqlSession对象
            sqlSession = sqlSessionFactory.openSession();
            //将SqlSession对象与当前线程绑定在一起
            threadLocal.set(sqlSession);
        }
        //返回SqlSession对象
        return sqlSession;
    }
    /**
     * 关闭SqlSession与当前线程分开
     */
    public static void closeSqlSession(){
        //从当前线程中获取SqlSession对象
        SqlSession sqlSession = threadLocal.get();
        //如果SqlSession对象非空
        if(sqlSession != null){
            //关闭SqlSession对象
            sqlSession.close();
            //分开当前线程与SqlSession对象的关系,目的是让GC尽早回收
            threadLocal.remove();
        }
    }
}

5.配置mabatis连接数据库的文件

<?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>
    <environments default="mysql_development">
        <environment id="mysql_development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/> 
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb4"/>    
                <property name="username" value="root"/>    
                <property name="password" value="123"/> 
            </dataSource>
        </environment>

    </environments>

    <mappers>
        <mapper resource="com/mybatis/bean/StudentMapper.xml"></mapper>
    </mappers>
</configuration>

6.测试

public static void main(String[] args) {
        //测试数据库配置文件是否正确
        Connection conn = MyBatisUtil.getSqlSession().getConnection();
        System.out.println(conn!=null?"连接成功":"连接失败");
        //测试插入一条数据
        StudentDao dao = new StudentDao();
        dao.add(new Student("0001","daMing",20));
    }

二,myBatist的增删改查

1.studentMapper.xml文件的配置

<!-- 插入语句 
        parameterType:参数类型
    -->
    <insert id="add" parameterType="com.mybatis.bean.Student">
        insert into student(id,name,age) values(#{id},#{name},#{age});
    </insert>
    <!-- 
        resultMap:解决bean类和表字段不一致导致的映射问题
      -->
     <select id="add" parameterType="int" resultMap="studentMap">
        select s_id,s_name,s_age from student where s_id = #{id};
     </select>
    <!--查询语句 
        parameterType:请求参数类型
        resultType:返回值类型
     -->
     <select id="findById" parameterType="string" resultType="com.mybatis.bean.Student">
        select id,name,age from student where id = #{id};
     </select>

     <!-- 查询所有
         如果返回结果为list,那么resultType只需要写list里面的类型 
      -->
      <select id="findAll" resultType="com.mybatis.bean.Student">
        select id,name,age from student;
     </select>


     <!-- 更新操作 -->

     <update id="update" parameterType="com.mybatis.bean.Student">
        update student set age = #{age},name = #{name} where id = #{id};
     </update>
     <!--删除-->
     <delete id="deleteById" parameterType="string">
        delete from student where id = #{id};
     </delete>
     <!-- 多参数查询
        map:封装多个查询参数
      -->
     <select id="findByLimit" parameterType="map" resultMap="studentMap">
        select id,name,age from student limit #{start},#{size};
     </select>

2.dao文件

    //添加学生
    public void add(Student student){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        sqlSession.insert("studentNameSpace.add",student);
        sqlSession.commit();
    }
    //根据id查询学生
    public Student findById(String id){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try {
            Student student = sqlSession.selectOne("studentNameSpace.findById",id);
            sqlSession.commit();
            return student;
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.toString());
            sqlSession.rollback();
        }finally{
            MyBatisUtil.closeSqlSession();
        }
        return null;
    }
    //查询多个学生
    public List<Student> findAll(){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try {
            List<Student> students = sqlSession.selectList("studentNameSpace.findAll");
            sqlSession.commit();
            return students;
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.toString());
            sqlSession.rollback();
        }finally{
            MyBatisUtil.closeSqlSession();
        }
        return null;
    }
    //更新学生
    public void update(Student student){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try {
            sqlSession.update("studentNameSpace.update",student);
            sqlSession.commit();
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.toString());
            sqlSession.rollback();
        }finally{
            MyBatisUtil.closeSqlSession();
        }
    }
    //删除学生
    public void deleteById(String id){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try {
            sqlSession.delete("studentNameSpace.deleteById",id);
            sqlSession.commit();
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.toString());
            sqlSession.rollback();
        }finally{
            MyBatisUtil.closeSqlSession();
        }
    }
    //分页查询
    public List<Student> findByLimit(int start,int size){
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        try {
            Map<String,Integer> map = new HashMap<String, Integer>();
            map.put("start", start);
            map.put("size", size);
            List<Student> students = sqlSession.selectList("studentNameSpace.findByLimit",map);
            sqlSession.commit();
            return students;
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e.toString());
            sqlSession.rollback();
        }finally{
            MyBatisUtil.closeSqlSession();
        }
        return null;
    }

3.测试


        StudentDao dao = new StudentDao();
//      dao.add(new Student("0002","xiaoLong",10));
//      dao.add(new Student("0003","哈哈",10));
//      dao.add(new Student("0004","呵呵",10));

//      Student student = dao.findById("0001");
//      System.out.println(student.getName()+":"+student.getAge());

        /**
        List<Student> students = dao.findAll();
        for (Student student : students) {
            System.out.println(student.getName()+":"+student.getAge());
        }*/

//      dao.update(new Student("0003","hehe",10));

        dao.deleteById("0004");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章