AI智能
改变未来

三大框架之—MyBaits 第一章


1、第一章MyBatis入门

1.1框架

框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。对于程序员来说,框架是一套资源,其中包含Jar包、文档。

1.2Mybatis概述

1.3Mybatis体系结构

1.4Mybatis工作原理

1.5 第一个Mybatis程序

/01-primary-mybatis
实现将Student信息导入dao中
定义学生类
private String name成员变量 不叫属性 成员变量是私有的,而属性是对外公开的,二者不一定相等 get、set方法中的去掉类型并小写如name这是属性 成员变量是私有的,属性是可以通过set、get方法操作的
private Integer id;//定义成包装类型 以后可以作if(id == null)的判断,不是必须但是更方便

public class Student {//成员变量 不叫属性 成员变量是私有的,而属性是对外公开的,二者不一定相等 get、set方法中的去掉类型并小写如//name这是属性 成员变量是私有的,属性是可以通过set、get方法操作的private Integer id;//定义成包装类型 以后可以作if(id == null)的判断,不是必须但是更方便private String name;private int age;private double score;public Student() {super();// TODO Auto-generated constructor stub}public Student(String name, int age, double score) {super();this.name = name;this.age = age;this.score = score;}public void setId(Integer id) {this.id = id;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public void setScore(double score) {this.score = score;}@Overridepublic String toString() {return \"Student [id=\" + id + \", name=\" + name + \", age=\" + age + \", score=\" + score + \"]\";}}

定义Dao接口

public interface IStudentDao {void insertStu(Student student);}

定义Dao实现类
1、加载主配置文件
2、创建sqlSessionFactory对象
3、创建sqlSession对象
4、相关操作
5、sqlSession提交

public class StudentDaoImpl implements IStudentDao {private SqlSession sqlSession;@Overridepublic void insertStu(Student student) {try {//1、加载主配置文件InputStream inputStream = Resources.getResourceAsStream(\"mybatis.xml\");//2、创建sqlSessionFactory对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//3、创建sqlSession对象sqlSession = sqlSessionFactory.openSession();//4、相关操作sqlSession.insert(\"insertStudent\", student);//5、sqlSession提交sqlSession.commit();} catch (Exception e) {e.printStackTrace();}finally {if(sqlSession != null) {sqlSession.close();//sqlSession 关闭了就不用回滚}}}}

定义映射文件
映射文件,简称为mapper,主要完成Dao层中SQL语句映射。名称随意,一般放在dao包中。

<?xml version=\"1.0\" encoding=\"UTF-8\" ?><!DOCTYPE mapperPUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\"http://mybatis.org/dtd/mybatis-3-mapper.dtd\"><mapper namespace=\"test\"><insert id=\"insertStudent\" parameterType=\"com.bjpowernode.beans.Student\">insert into student(name,age,score) values(#{name}, #{age}, #{score})<!-- 也放在dao包下,表示映射 --></insert></mapper>

定义主配置文件

<configuration><!-- 配置运行环境 --><environments default=\"mysqlEm\"><environment id=\"mysqlEm\"><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/test\"/><property name=\"username\" value=\"root\"/><property name=\"password\" value=\"333\"/></dataSource></environment></environments><!-- 注册映射文件 --><mappers><mapper resource=\"com/bjpowernode/dao/mapper.xml\"/></mappers></configuration>

1.6 多个映射文件

/02-primary-2
1)新添加一个映射文件
将原来的映射文件直接复制一份,粘贴到相同目录中,并重命名,然后,在主配置文件中对齐进行注册。

<!-- 注册映射文件 --><mappers><mapper resource=\"com/bjpowernode/dao/mapper.xml\"/><mapper resource=\"com/bjpowernode/dao/mapper2.xml\"/></mappers>

此时,再运行相同的测试,会报错。因为可以匹配上的相同的SQL映射id出现了两个,系统不知应该执行哪一个。
2)修改任意一个映射文件
可以修改任意一个映射文件标签的namespace属性,将两个不同映射文件中的SQL映射,归为不同的命名空间。
命名空间的作用是用于区分不同命名空间中的同名SQL映射的id。例如修改第二个mapper文件的命名空间为reyco。

<?xml version=\"1.0\" encoding=\"UTF-8\" ?><!DOCTYPE mapperPUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\"http://mybatis.org/dtd/mybatis-3-mapper.dtd\"><mapper namespace=\"reyco\"><insert id=\"inserts\" parameterType=\"com.bjpowernode.beans.Student\">insert into student(name,age,score) values(#{name}, #{age}, #{score})<!-- 也放在dao包下,表示映射 --></insert></mapper>

3)修改Dao实现类

或者是reyco.insert
一般所使用的SQL映射在这些命名空间中的id都是唯一的,可以直接使用id如insert或insertStudent,但还是建议用命名空间作为前缀这样使用。

1.7 使用工具类和属性文件

/03-primary-3
1)使用工具类
优于每次一执行SqlSession的方法,均需要先获取到该对象。而SqlSession对象的获取又比较繁琐,所以将获取SqlSession对象定义为一个工具类方法。
SqlSession对象是通过SqlSessionFactory对象创建的。由于SqlSessionFactory类为重量级对象,且为线程安全的,所以可以将SqlSessionFactory对象定义为单例的。
其他类不变
创建工具类

package com.bjpowernode.utils;import java.io.IOException;import java.io.InputStream;import java.io.Reader;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 MyBatisUtils {private static SqlSessionFactory sqlSessionFactory;public static SqlSession getSqlSession() {try {InputStream is = Resources.getResourceAsStream(\"mybatis.xml\");if (sqlSessionFactory == null) {sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);}return sqlSessionFactory.openSession();} catch (IOException e) {e.printStackTrace();}return null;}}

修改Dao接口的实现类

public class StudentDaoImpl implements IStudentDao {private SqlSession sqlSession;@Overridepublic void insertStu(Student student) {try {sqlSession = MyBatisUtils.getSqlSession();sqlSession.insert(\"insertStudent\", student);sqlSession.commit();} finally {if(sqlSession != null) {sqlSession.close();//sqlSession 关闭了就不用回滚}}}}

2)从属性文件中读取DB连接四要素
为了方便对数据库连接的管理,DB连接四要素数据一般都是存放在一个专门的属性文件中的。MyBatis主配置文件需要从这个属性文件中读取这些数据。
定义属性文件
/03-primary-3/src/jdbc_mysql.properties

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql:///testjdbc.user=rootjdbc.password=333

修改主配置文件
第一,需要注册属性文件。
第二,需要从属性文件中通过key,将其value读取出来。

1.8主配置文件详解

1)注册DB连接四要素属性文件

2)指定实体类全限定性类名的别名
将指定包中所有类的简单类名当作其别名

<typeAliases><!-- <typeAlias type=\"com.bjpowernode.beans.Student\" alias=\"Student\"/> --><!-- 将指定包中所有类的简单类名当作其别名 -->一般用这个<package name=\"com.bjpowernode.beans\"/></typeAliases>

mapper映射文件可以修改为
parameterType=\”Studen\”属性可以省略

<mapper namespace=\"test\"><!-- parameterType属性可以省略 --><insert id=\"insertStudent\" parameterType=\"Student\">insert into student(name,age,score) values(#{name}, #{age}, #{score})</insert></mapper>

3)配置MyBatis运行环境
A、标签
在中可以包含多个运行环境,但·其default属性指定了当前MyBatis运行时所选择使用的环境。

B、标签
指定了MyBatis所使用的事务管理器。
JDBC:使用JDBC的事务管理机制。通过Connection的commit()方法提交,通过rollback()方法回滚。但默认情况下,MyBatis将自动提交功能关闭了,改为手动提交。
C、标签
用于配置MyBatis使用的数据源类型与数据库连接基本属性。
POOLED:使用数据库连接池来维护连接。
从属性文件读取。

4)指定映射文件

API详解

见文档。

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 三大框架之—MyBaits 第一章