• mybatis快速入门


    1)创建一个mybatis-day01这么一个javaweb工程或java工程

    2)导入mybatis和mysql/oracle的jar包到/WEB-INF/lib目录下

    3)创建students.sql表

    --mysql语法
    create table students(
       id  int(5) primary key,
       name varchar(10),
       sal double(8,2)
    );
    --oracle语法
    create table students(
       id  number(5) primary key,
       name varchar2(10),
       sal number(8,2)
    );

    4)创建Student.java

    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;
        }
    }

    5)创建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">
    
    <!-- namespace属性是名称空间,必须唯一 -->
    <mapper namespace="loaderman.Student">
        
        <!-- resultMap标签:映射实体与表 
             type属性:表示实体全路径名
             id属性:为实体与表的映射取一个任意的唯一的名字
        -->
        <resultMap type="student" id="studentMap">
            <!-- id标签:映射主键属性
                 result标签:映射非主键属性
                 property属性:实体的属性名
                 column属性:表的字段名     
            -->                            
            <id property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="sal" column="sal"/>
        </resultMap>
    
        
        <!-- 
            insert标签:要书写insert这么一个sql语句
            id属性:为insert这么一个sql语句取一个任意唯一的名字
            parameterType:要执行的dao中的方法的参数,如果是类的话,必须使用全路径类
        -->
        <insert id="add1">
            insert into students(id,name,sal) values(1,'哈哈',7000)
        </insert>
        
        
        <insert id="add2" parameterType="student">
            insert into students(id,name,sal) values(#{id},#{name},#{sal})
        </insert>
        
        
        <insert id="add3" parameterType="student">
            insert into students(id,name,sal) values(#{id},#{name},#{sal})
        </insert>
    
    </mapper>

    6)在src目录下创建mybatis.xml配置文件

    <?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>

    7)创建MyBatisUtil.java类,并测试与数据库是否能连接

    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?"连接成功":"连接失败");
        }
    }

    8)创建StudentDao.java类并测试

    package loaderman;
    
    import org.apache.ibatis.session.SqlSession;
    
    /**
     * 持久层
     */
    public class StudentDao {
        /**
         * 增加学生
         */
        public void add1() throws Exception{
            SqlSession sqlSession = null;
            try{
                sqlSession = MybatisUtil.getSqlSession();
                //事务开始(默认)
                //读取StudentMapper.xml映射文件中的SQL语句
                int i = sqlSession.insert("loaderman.Student.add1");
                System.out.println("本次操作影响了"+i+"行");
                //事务提交
                sqlSession.commit();
            }catch(Exception e){
                e.printStackTrace();
                //事务回滚
                sqlSession.rollback();
                throw e;
            }finally{
                MybatisUtil.closeSqlSession();
            }
        }
        /**
         * 增加学生
         */
        public void add2(Student student) throws Exception{
            SqlSession sqlSession = null;
            try{
                sqlSession = MybatisUtil.getSqlSession();
                //事务开始(默认)
                //读取StudentMapper.xml映射文件中的SQL语句
                sqlSession.insert("loaderman.Student.add2",student);
                //事务提交
                sqlSession.commit();
            }catch(Exception e){
                e.printStackTrace();
                //事务回滚
                sqlSession.rollback();
                throw e;
            }finally{
                MybatisUtil.closeSqlSession();
            }
        }
        /**
         * 增加学生
         */
        public void add3(Student student) throws Exception{
            SqlSession sqlSession = null;
            try{
                sqlSession = MybatisUtil.getSqlSession();
                sqlSession.insert("loaderman.Student.add3",student);
                sqlSession.commit();
            }catch(Exception e){
                e.printStackTrace();
                sqlSession.rollback();
                throw e;
            }finally{
                MybatisUtil.closeSqlSession();
            }
        }
    
        public static void main(String[] args) throws Exception{
            StudentDao dao = new StudentDao();
    //        dao.add1();
            dao.add2(new Student(2,"呵呵",8000D));
            dao.add3(new Student(3,"嘻嘻",9000D));
            dao.add3(new Student(4,"笨笨",9000D));
        }
    }
  • 相关阅读:
    哈希算法原理和一致性哈希算法
    负载均衡之轮循算法
    Mybatis的使用
    Spring与SpringMVC的整合
    编程式事务与声明式事务
    八大排序方法及对Arrays类的排序实现探讨
    单例模式的线程安全性
    HotSpot对象的创建及内存布局
    逃逸分析、栈上分配、标量替换、同步替换
    java编译器和解释器
  • 原文地址:https://www.cnblogs.com/loaderman/p/10064256.html
Copyright © 2020-2023  润新知