mybatis初学

来源:互联网 发布:情趣淘宝店 编辑:程序博客网 时间:2024/05/18 01:18

mybatis工作流程

1)通过Reader对象读取src目录下的mybatis.xml配置文件(该文本的位置和名字可任意)

2)通过SqlSessionFactoryBuilder对象创建SqlSessionFactory对象

3)从当前线程中获取SqlSession对象

4)事务开始,在mybatis中默认

5)通过SqlSession对象读取StudentMapper.xml映射文件中的操作编号,从而读取sql语句

6)事务提交,必写

7)关闭SqlSession对象,并且分开当前线程与SqlSession对象,让GC尽早回收

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="cn.buaa.mybatis.app1.Student" alias="student"/>        </typeAliases>        <!--   设置默认的连接环境信息 -->        <environments default="mysql_developer">               <!--    连接环境信息  ,随便起一个唯一的名字 -->                <environment id="mysql_developer">                        <!--   mybatis使用jdbc事物管理方式 -->                        <transactionManager type="jdbc"></transactionManager>                        <!--     mybatis使用连接池方式来获取连接 -->                        <dataSource type="pooled">                                <property name="driver" value="com.mysql.jdbc.Driver"/>                                <property name="url" value="jdbc:mysql://localhost:3306/emp"/>                                <property name="username" value="root"/>                                <property name="password" value="123456"/>                        </dataSource>                </environment>                                <!--    连接环境信息  ,随便起一个唯一的名字 -->                <environment id="oracle_developer">                        <!--   mybatis使用jdbc事物管理方式 -->                        <transactionManager type="jdbc"></transactionManager>                        <!--     mybatis使用连接池方式来获取连接 -->                        <dataSource type="pooled">                                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>                                <property name="url" value="jdbc:oracle:thin:@localhost:1521/orcl"/>                                <property name="username" value="zhangdong"/>                                <property name="password" value="123456"/>                        </dataSource>                </environment>        </environments>        <!--    加载映射文件-->        <mappers>                <mapper resource="cn/buaa/mybatis/app1/studentMapper.xml"/>        </mappers></configuration>
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="studentNamespace">         <!-- 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(2,'哈哈',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>
StudentDao.java

package cn.buaa.mybatis.app1;import org.apache.ibatis.session.SqlSession;import cn.buaa.mybatis.util.MybatisUtil;/** * 持久层 * @author 梧桐下的茵 * */public class StudentDao {/** * 增加学生 */public void add1() throws Exception{SqlSession sqlSession = null;try {sqlSession = MybatisUtil.getSqlSession();int i = sqlSession.insert("studentNamespace.add1");System.out.println("本次操作影响了" + i + "行");//事物提交sqlSession.commit();} catch (Exception e) {e.printStackTrace();sqlSession.rollback();}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));}}
MybatisUtil.java  mybatis工具类

package cn.buaa.mybatis.util;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;/** * 工具类 * @author 梧桐下的茵 * */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();}}//禁止外部 new private MybatisUtil(){}/** * 获取SqlSession */public static SqlSession getSqlSession(){SqlSession sqlSession = threadLocal.get();if(sqlSession == null){sqlSession = sqlSessionFactory.openSession();threadLocal.set(sqlSession);}return sqlSession;}/** * 关闭SqlSession与当前线程分离 */public static void closeSqlSession(){SqlSession sqlSession = threadLocal.get();if(sqlSession != null){sqlSession.close();}//分离当前线程与SqlSession对象的关系,目的是让GC尽早回收threadLocal.remove();}/** * 测试 */public static void main(String[] args) {Connection connection = MybatisUtil.getSqlSession().getConnection();System.out.println(connection != null ? "连接成功" : "连接失败");}}





0 0