學習完實現第一個Mybatis第一個程序之後,要開始寫一個最最最基本的增刪改查了。這篇文章主要會講述以下幾個方面的內容:
一、第一個Mybatis的重構
二、Mybatis主配置文件的介紹
三、Mybatis實現簡單的增刪改查
首先開始第一個部分
一、第一個Mybatis的重構
學了好幾個持久層的框架,發現他每一個框架都需要進行編寫工具類,Mybatis也不例外。
package utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
/**
* mybatis的工具類
*/
public class MybatisUtil {
//聲明一個sqlSession對象
public static volatile SqlSessionFactory sqlSessionFactory;
public static SqlSession getSqlSession() {
try {
if (sqlSessionFactory == null) {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
synchronized (MybatisUtil.class) {
if (sqlSessionFactory == null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return sqlSessionFactory.openSession();
}
}
這個工具類的主要目的就是爲了獲得sqlSession對象,然後更方便實現增刪改查的方法,寫完上面這個工具類,那麼就可以在dao的實現類中獲取sqlsession對象,然後調用裏面的方法。
@Override
public void insertStudent(Student student) {
SqlSession sqlSession = MybatisUtil.getSqlSession();
sqlSession.insert("insertStudent",student);
sqlSession.commit();
}
這樣就能夠持續的用sqlSession了,不用每一次都需要加載mybatis.xml配置文件
二、Mybatis主配置文件的介紹
Mybatis的配置文件是非常重要的,下面就是簡單的介紹常用的配置:
數據庫連接配置:
db.properties文件:
jbdc.drive=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/learnmybatis?serverTimezone=UTC
jdbc.user=root
jdbc.password=自己的數據庫連接密碼
數據庫環境配置:
transactionManager標籤
該標籤用於指定MyBatis所使用的事務管理器。 MyBatis 支持兩種事務管理器類型:
- JDBC:該事務器就是我們之前通過Connection的commit()方法提交,通過rollback()方法回滾,默認是需要手動提交的。
- MANAGED:由容器來管理事務的整個事務的生命週期,默認情況下會關閉連接,將來學習spring框架之後,就不用在配置事務管理器了,spring會使用自帶的管理器。
dataSource標籤
該項主要用於配置數據源和數據庫連接基本屬性,有以下三種內建的數據源類型:
- UNPOOLED:該配置表示不使用連接池,每次請求都會創建一個數據庫連接,使用完畢後再關閉。當項目對數據庫性能要求不大的時候,可以使用該配置。
- POOLED:改配置表示使用mybatis自帶的數據庫連接池,可以在dataSource下的property屬性中設置數據庫連接池的基本信息,該部分可以在mybatis的官網中看到。
- JNDI:配置外部數據源
mapper映射配置:
<mappers>
<!--使用相對於類路徑的資源引用-->
<mapper resource="XXXXX/StudentMapper.xml"/>
</mappers>
使用別名:
這個意思就是在mapper文件中編寫代碼時,要引用相應包下面的類,爲了減少代碼量所寫的配置文件:
具體例子:
配置之前:
<mapper namespace="zhiguo98">
<!--parameterType可省略-->
<insert id="insertStudent" parameterType="domain.Student">
INSERT INTO t_student(name,age,score) VALUES (#{name},#{age},#{score})
</insert>
</mapper>
配置之後:
關於Mybatis的配置就說這麼多,其實有的地方我也不太懂,不懂的地方用到了再去查吧!
三、Mybatis實現簡單的增刪改查
首先就是要編寫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="zhiguo98">
<!--parameterType可省略-->
<!--增加-->
<insert id="insertStudent" parameterType="student">
INSERT INTO t_student(name,age,score) VALUES (#{name},#{age},#{score})
</insert>
<!--刪除-->
<delete id="deleteStudent" parameterType="student">
delete from t_student where id=#{id}
</delete>
<!--修改-->
<update id="updateStudent" parameterType="student">
update t_student set name=#{name},age=#{age},score=#{score} where id=#{id}
</update>
<!--查詢一個-->
<select id="findOne" resultType="student">
select * from t_student where id=#{id}
</select>
<!--查詢多個-->
<select id="findAll" resultType="student">
select * from t_student
</select>
</mapper>
StudentDao.java文件:
package dao;
import domain.Student;
import java.util.List;
public interface StudentDao {
public abstract void insertStudent(Student student);
public abstract void deleteStudent(int id);
public abstract void updateStudent(Student student);
public abstract Student findOne(int id);
public abstract List<Student> findAll();
}
StudentDaoImpl2.java文件:
package dao.impl;
import dao.StudentDao;
import domain.Student;
import org.apache.ibatis.session.SqlSession;
import utils.MybatisUtil;
import java.util.List;
public class StudentDaoImpl2 implements StudentDao {
/**
* 插入一個數據
* @param student
*/
@Override
public void insertStudent(Student student) {
SqlSession sqlSession = MybatisUtil.getSqlSession();
sqlSession.insert("insertStudent",student);
sqlSession.commit();
}
/**
* 根據id刪除一個數據
* @param id
*/
@Override
public void deleteStudent(int id) {
SqlSession sqlSession = MybatisUtil.getSqlSession();
sqlSession.delete("deleteStudent",id);
sqlSession.commit();
}
/**
* 更新一條信息
* @param student
*/
@Override
public void updateStudent(Student student) {
SqlSession sqlSession = MybatisUtil.getSqlSession();
sqlSession.update("updateStudent",student);
sqlSession.commit();
}
/**
* 根據id查詢一條信息
* @param id
* @return
*/
@Override
public Student findOne(int id) {
SqlSession sqlSession = MybatisUtil.getSqlSession();
Student stu = sqlSession.selectOne("findOne", id);
System.out.println(stu);
sqlSession.commit();
return stu;
}
/**
* 查詢所有的信息
* @return
*/
@Override
public List<Student> findAll() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
List<Student> findAll = sqlSession.selectList("findAll");
for (Student student : findAll) {
System.out.println(student);
}
return findAll;
}
}
測試文件:
package test;
import dao.StudentDao;
import dao.impl.StudentDaoImpl;
import dao.impl.StudentDaoImpl2;
import domain.Student;
import org.junit.jupiter.api.Test;
import java.util.List;
public class StudentTest01 {
/**
* 測試插入一條數據
*/
@Test
public void insertStudent(){
StudentDao studentDao = new StudentDaoImpl2();
Student student = new Student();
student.setName("zhiguo98");
student.setAge(12);
student.setScore(99.0);
studentDao.insertStudent(student);
}
/**
* 測試刪除一條數據
*/
@Test
public void deleteStudent(){
StudentDao studentDao = new StudentDaoImpl2();
studentDao.deleteStudent(2);
}
/**
* 測試更新信息方法
*
*/
@Test
public void updateStudent(){
StudentDao studentDao = new StudentDaoImpl2();
Student student = new Student(1,"zhiguo98",23,23);
studentDao.updateStudent(student);
}
/**
* 測試查找一條信息的方法
*/
@Test
public void findOne(){
StudentDao studentDao = new StudentDaoImpl2();
Student one = studentDao.findOne(3);
System.out.println(one);
}
/**
* 測試查詢所有的方法
*/
@Test
public void findAll(){
StudentDao studentDao = new StudentDaoImpl2();
List<Student> all = studentDao.findAll();
for (Student student : all) {
System.out.println(student);
}
}
}
這篇博客就學到這,下午的時間開始練算法題。。。。。。