记录一下MyBatis的内容
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
— MyBatis简介
在去MyBatis官网下载jar包时,会有一个说明书里面有框架的使用方式,包括一些必要的代码,所以CV大法(复制粘贴)在写框架代码时是非常必要的。
这里我用maven( 不需要手动下载jar包直接添加依赖就好)写了一些测试记录一下。
pom文件内容
<dependencies>
<!-- ojdbc8连接驱动 这个版本是错误率比较低的一个版本 推荐使用 -->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
<!-- MyBatis框架jar包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.6</version>
</dependency>
<!-- 一个测试工具 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
一、关键的xml文件
mybatis-config.xml(最好是这个名字) 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器
<?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="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
<property name="username" value="web" />
<property name="password" value="web" />
</dataSource>
</environment>
</environments>
<!-- 数据库sql语句配置文件的地址 -->
<mappers>
<mapper resource="com/briup/day1/mapper/UserMapper.xml"/>
</mappers>
</configuration>
这个文件里还可以有很多标签功能,本次内容中没有用到,想了解的可以去官方文档中查看。
二、封装一个工厂类
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
import java.io.IOException;
import java.io.InputStream;
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 GetSqlSession {
private static SqlSessionFactory sqlSessionFactory;
public static SqlSessionFactory getSqlSessionFactory(){
if(sqlSessionFactory == null){
InputStream inputStream = null;
try {
//官方文档中提供的方法
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e.getCause());
}
}
return sqlSessionFactory;
}
public static SqlSession openSession() {
return openSession(false);
}
public static SqlSession openSession(boolean autoCommit) {
return getSqlSessionFactory().openSession(autoCommit);
}
}
三、sql语句的映射文件
<?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文件对应的接口类 -->
<mapper namespace="com.briup.day1.dao.UserDao">
<!-- id对应java中的方法名 -->
<!-- resultType对应java中的返回类型 -->
<!-- parameterType对应java中的参数类型 -->
<insert id="insertUser" parameterType="com.briup.day1.bean.User">
<!-- selectKey为主键自增 -->
<!-- keyProperty为实例类中的对应的属性 -->
<!-- resultType为属性类型 -->
<selectKey keyProperty="id" resultType="long" order="BEFORE">
select my_seq.nextval from dual
</selectKey>
INSERT INTO
T_USER(ID,NAME,AGE,GENDER)
VALUES(#{id},#{name},#{age},#{gender})
</insert>
<select id="selectUserById" parameterType="Long" resultType="com.briup.day1.bean.User">
select id,name,age,gender
from t_user
where id=#{id}
</select>
<select id="selectAll" resultType="com.briup.day1.bean.User">
select id,name,age,gender
from t_user
</select>
<delete id="deleteUser" parameterType="long">
delete from t_user
where id=#{id}
</delete>
<update id="updateUser" parameterType="com.briup.day1.bean.User" >
update t_user set name=#{name}
where id =#{id}
</update>
</mapper>
这个文件中存放了sql中基本的增删改查操作
注意: 所有的xml文件都要放在maven中的src/main/resources中
四、对应的接口类
import java.util.List;
import com.briup.day1.bean.User;
public interface UserDao {
public void insertUser(User user) ;
public List<User> selectAll() ;
public User selectUserById(long id) ;
public void deleteUser(long id) ;
public void updateUser(User user) ;
}
五、测试
在src/test/java中测试
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.briup.day1.bean.User;
import com.briup.day1.dao.UserDao;
import com.briup.util.GetSqlSession;
public class MyBatisTest {
@Test
public void test1() {
try {
SqlSession session = GetSqlSession.openSession();
UserDao u = session.getMapper(UserDao.class);
u.insertUser(new User("s",20,"男"));
session.commit();
session.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test2() {
try {
SqlSession session = GetSqlSession.openSession();
UserDao u = session.getMapper(UserDao.class);
User user = u.selectUserById(1);
System.out.println(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test3() {
try {
SqlSession session = GetSqlSession.openSession();
UserDao u = session.getMapper(UserDao.class);
u.updateUser(new User(1,"sb",20,"男"));
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test4() {
try {
SqlSession session = GetSqlSession.openSession();
UserDao u = session.getMapper(UserDao.class);
u.deleteUser(7);
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Test
public void test5() {
try {
SqlSession session = GetSqlSession.openSession();
UserDao u = session.getMapper(UserDao.class);
List<User> user = u.selectAll();
System.out.println(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}