基于MybatisUtil工具类,完成CURD操作

package loaderman;

import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * 工具类
 */
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();
        }
    }

    /**
     * 测试
     */
    public static void main(String[] args) {
        Connection conn = MybatisUtil.getSqlSession().getConnection();
        System.out.println(conn!=null?"连接成功":"连接失败");
    }
}
package loaderman;
/**
 * 学生
 */
public class Student {
    private Integer id;//编号
    private String name;//姓名
    private Double sal;//薪水
    public Student(){}
    public Student(Integer id, String name, Double sal) {
        this.id = id;
        this.name = name;
        this.sal = sal;
    }
    public Integer getId() {
        System.out.println("getId()");
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        System.out.println("getName()");
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Double getSal() {
        System.out.println("getSal()");
        return sal;
    }
    public void setSal(Double sal) {
        this.sal = sal;
    }
}
package loaderman;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

/**
 * 持久层
 * @author AdminTC
 */
public class StudentDao1 {
    /**
     * 增加学生
     */
    public void add(Student student) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            sqlSession.insert("loaderman.Student.add",student);
            sqlSession.commit();
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }
    /**
     * 根据ID查询学生
     */
    public Student findById(int id) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            Student student = sqlSession.selectOne("loaderman.Student.findById",id);
            sqlSession.commit();
            return student;
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }
    /**
     * 查询所有学生
     */
    public List<Student> findAll() throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            return sqlSession.selectList("loaderman.Student.findAll");
        }catch(Exception e){
            e.printStackTrace();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }
    /**
     * 更新学生
     */
    public void update(Student student) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            sqlSession.update("loaderman.Student.update",student);
            sqlSession.commit();
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }
    /**
     * 删除学生
     */
    public void delete(Student student) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            sqlSession.delete(Student.class.getName()+".delete",student);
            sqlSession.commit();
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }

    public static void main(String[] args) throws Exception{
        StudentDao1 dao = new StudentDao1();
//        dao.add(new Student(1,"哈哈",7000D));
//        dao.add(new Student(2,"呵呵",8000D));
//        dao.add(new Student(3,"班长",9000D));
//        dao.add(new Student(4,"键状高",10000D));
//        Student student = dao.findById(4);
        List<Student> studentList = dao.findAll();
        for(Student student : studentList){
            System.out.print(student.getId()+":"+student.getName()+":"+student.getSal());
            System.out.println();
        }
        //Student student = dao.findById(3);
        //student.setName("靓班长");
        //dao.update(student);

//        Student student = dao.findById(3);
//        System.out.print(student.getId()+":"+student.getName()+":"+student.getSal());

        //dao.delete(student);
    }
}
package loaderman;

import org.apache.ibatis.session.SqlSession;

/**
 * 持久层
 */
public class StudentDao2 {
    /**
     * 增加学生
     */
    public void add(Student student) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            sqlSession.insert("loaderman.Student.add",student);
            sqlSession.commit();
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }
    /**
     * 根据ID查询学生
     */
    public Student findById(int id) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            Student student = sqlSession.selectOne("loaderman.Student.findById",id);
            sqlSession.commit();
            return student;
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }

    public static void main(String[] args) throws Exception{
        StudentDao2 dao = new StudentDao2();
        //dao.add(new Student(1,"班长",7000D));
        Student student = dao.findById(1);
        if(student == null){
            System.out.println("YES");
        }
        System.out.println(student.getId()+":"+student.getName()+":"+student.getSal());
    }
}
<?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="loaderman.Student">

    <resultMap type="loaderman.Student" id="studentMap">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="sal" column="sal"/>
    </resultMap>

    <!-- 增加学生 -->
    <insert id="add" parameterType="loaderman.Student">
        insert into students(id,name,sal) values(#{id},#{name},#{sal})
    </insert>

    <!-- 根据ID查询学生
         如果参数不是一个实体的话,只是一个普通变量,例如:int,double,String
         这里的#{中间的变量名可以随便写},不过提倡就用方法的形参
     -->
    <select id="findById" parameterType="int" resultType="loaderman.Student">
        select id,name,sal from students where id = #{id}
    </select>

    <!-- 查询所有学生
         理论上resultType要写List<Student>
         但这里只需书写List中的类型即可,即只需书写Student的全路径名
    -->
    <select id="findAll" resultType="loaderman.Student">
        select id,name,sal from students
    </select>

    <!-- 更新学生 -->
    <update id="update" parameterType="loaderman.Student">
        update students set name=#{name},sal=#{sal} where id=#{id}
    </update>

    <!-- 删除学生 -->
    <delete id="delete" parameterType="loaderman.Student">
        delete from students where id = #{id}
    </delete>

    <!--
    <insert id="delete" parameterType="cn.itcast.javaee.mybatis.app09.Student">
        delete from students where id = #{id}
    </insert>
    -->    

    <!--
        注意:这个insert/update/delete标签只是一个模板,在做操作时,其实是以SQL语句为核心的
             即在做增/删/时,insert/update/delete标签可通用,
             但做查询时只能用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="studentNamespace">    

    <!-- 当实体属性与表字段名不相同的时候,必须书写以下代码
         当实体属性与表字段名相同的时候,以下代码可选
     -->
    <resultMap type="loaderman.Student" id="studentMap">
        <id property="id" column="students_id"/>
        <result property="name" column="students_name"/>
        <result property="sal" column="students_sal"/>
    </resultMap>

    <!-- 增加学生 -->
    <insert id="add" parameterType="loaderman.Student">
        insert into students(students_id,students_name,students_sal)
        values(#{id},#{name},#{sal})
    </insert>

    <!-- 根据ID查询学生
         mybatis会将查询出来的表记录和studentMap这个id所对应的映射结果相互匹配
    -->
    <select id="findById" parameterType="int" resultMap="studentMap">
        select students_id,students_name,students_sal
        from students
        where students_id = #{xxxxxxxxxxxxxxxxxx}
    </select>

</mapper>

db.properties

mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://127.0.0.1:3306/loaderman
mysql.username=root
mysql.password=root

oracle.driver=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
oracle.username=scott
oracle.password=tiger
<?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="db.properties"/>

    <!-- 设置类型别名 -->
    <typeAliases>
        <typeAlias type="loaderman.Student" alias="student"/>
    </typeAliases>

    <!-- 设置一个默认的连接环境信息 -->
    <environments default="mysql_developer">

        <!-- 连接环境信息,取一个任意唯一的名字 -->
        <environment id="mysql_developer">
            <!-- mybatis使用jdbc事务管理方式 -->
            <transactionManager type="jdbc"/>
            <!-- mybatis使用连接池方式来获取连接 -->
            <dataSource type="pooled">
                <!-- 配置与数据库交互的4个必要属性 -->
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>

        <!-- 连接环境信息,取一个任意唯一的名字 -->
        <environment id="oracle_developer">
            <!-- mybatis使用jdbc事务管理方式 -->
            <transactionManager type="jdbc"/>
            <!-- mybatis使用连接池方式来获取连接 -->
            <dataSource type="pooled">
                <!-- 配置与数据库交互的4个必要属性 -->
                <property name="driver" value="${oracle.driver}"/>
                <property name="url" value="${oracle.url}"/>
                <property name="username" value="${oracle.username}"/>
                <property name="password" value="${oracle.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件-->
    <mappers>
        <mapper resource="loaderman/StudentMapper.xml"/>
    </mappers>

</configuration>

原文地址:https://www.cnblogs.com/loaderman/p/10064414.html

时间: 2024-10-05 06:07:59

基于MybatisUtil工具类,完成CURD操作的相关文章

MyBatis系列:(3)基于MyBatisUtils工具类完成CRUD操作

Emp.java package com.rk.entity; public class Emp {     private Integer id;     private String name;     private Double sal;     public Emp(){}          public Emp(Integer id, String name, Double sal) {         this.id = id;         this.name = name;

ArcGIS API for JavaScript 4.2学习笔记[26] 缓冲区分析【基于geometryEngine工具类】

要说GIS空间分析最经典的例子,就是缓冲区分析了. 本例使用geometryEngine来绘制缓冲区环.因为官方给的例子有3D和2D场景,所以就会显得比较复杂. 当鼠标在视图上点击时,就会生成一个缓冲区环(以点击的点为中心): 当鼠标拖拽时,若不是漫游状态,则缓冲区环也会跟着一起动. 我会把生成缓冲区的核心代码用大标题红色标出,各位可以直接跳到那里学缓冲区的生成. 首先了解一下,缓冲区是以什么样的东西存在的? 在桌面GIS里,缓冲区就是一个面要素,可以是要素类也可以是shp文件. 在AJS里,缓

mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现

项目结构  基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/MybatisUtil.java package util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; i

org.tinygroup.commons-常用工具类

org.tinygroup.commons提供了各方面的静态类封装,是一个常用工具集合工程.下面列举一些常用的工具类: 类名 说明 BeanUtil 提供对Bean对象的参数提取/深度克隆等公用方法.                                  LocaleUtil 用来处理地域和字符编码的工具类.                                  StreamUtil 基于流的静态工具类.                                 

数据库工具类(我老师写的 感觉很好用)

一个封装好的 DButil工具类 AdminDao的 操作示例 仅仅只是想吧dbutil放出来,太棒了 最后 因为我仅仅想放出代码 可是系统要求150字数 我在结尾处 骗一些字数 1 DButil 2 AdminDao 1 DButil package cat.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLExce

java集合工具类---Collections/Arrays

/* *Collections用于操作List/Set的工具类 *Arrays用于操作数组的工具类 */ package pack; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.TreeSet; public class Main { pu

黑马程序员——19,Collections工具类,Arrays工具类,高级for循环,可变参数,静态导入

------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 黑马程序员--19,Collections工具类,Arrays工具类 /* Collections是一个类,注意,这里后面带有一个s 千万不要和Collection弄混了!Collection只是接口而已. 两者要区别开来. Collect

Java学习笔记33(集合框架七:Collections工具类)

数组有工具类,方面操作数组 集合也有工具类:Collections 常用方法示例: package demo; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class CollectionDemo { public static void main(String[] args) { function1(); function2(); function3(); } p

JDBC的工具类的抽取

1.1.1 抽取一个JDBC的工具类因为传统JDBC的开发,注册驱动,获得连接,释放资源这些代码都是重复编写的.所以可以将重复的代码提取到一个类中来完成. /** * JDBC的工具类 * @author jt * */ public class JDBCUtils { private static final String driverClassName; private static final String url; private static final String username