一.數據庫準備及環境搭建
1.數據庫mysql中使用database名爲mybatis並在其中創建表student表
create table student(
-> id int(11) primary key auto_increment,
-> stuname varchar(11),
-> major varchar(11),
-> sex varchar(1),
-> age int(11)
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
並插入一條數據用於測試
insert into student(stuname,major,sex,age)
values('roy','computer','M','23');
2.在IntelliJ IDEA中新建project命名爲mybatis_crudTest,建立結束後先在pom.xml配置文件中添加依賴全部代碼塊如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lut</groupId>
<artifactId>mybatis_crudTest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3.在src-》main-》java包中新建java項目命名爲:com.lut.domain.Student
並將屬性和getter、setter和toString方法加入。
Student.java如下:
package com.lut.domain;
public class Student {
private Integer id;
private String stuname;
private String major;
private String sex;
private int age;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", stuname='" + stuname + '\'' +
", major='" + major + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4.在resources包中首先創建數據庫配置文件jdbcConfig.properties,再創建sql映射文件sqlMapConfig.xml。
①:jdbcConfig.properties代碼如下
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
②:sqlMapConfig.xml代碼如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.ory//DTD Config 3.0//EN"
"htpp://mybatis.org/dtd/mybatis-3-config.dtd">
<!--mybatis的主配置文件-->
<configuration>
<!--配置properties可以在標籤內部配置連接數據庫的信息,也可以通過屬性引用外部配置信息文件
resource屬性:用於 指定配置文件的位置,是按照類路徑得分寫法來寫,並且必須存在與類路徑下 -->
<properties resource="jdbcConfig.properties">
</properties>
<!--使用typeAliases配置別名,它只能配置domain中類的別名-->
<typeAliases>
<!--用於指定要配置的別名的包,當指定智鬥,該包下的實體類都會註冊別名,並且類名就是別名,不再區分大小寫-->
<package name="com.lut.domain"></package>
</typeAliases>
<!--配置環境-->
<environments default="mysql">
<!--配置mysql的環境-->
<environment id="mysql">
<!--配置事務的類型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置數據源連接池-->
<dataSource type="POOLED">
<!--配置連接數據庫的四個基本信息-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件指的是每個dao獨立的配置文件-->
<mappers>
<!--package標籤用戶指定dao接口所在的包,當指定完成之後,就不需要再寫mapper以及resource或者class了-->
<package name="com.lut.dao"></package>
</mappers>
</configuration>
二.dao編寫及映射文件的創建
1.在src->main->java下新建java文件命名爲:com.lut.dao.IStudentDao
代碼如下:
package com.lut.dao;
import com.lut.domain.Student;
import java.util.List;
public interface IStudentDao {
//查詢表中所有學生
List<Student> findAll();
//添加學生信息
void saveStudent(Student student);
//更新學生信息
void updateStudent(Student student);
//根據id刪除學生信息
void deleteStudent(Integer id);
}
2.在resources包中新建directory爲com,然後在com包下新建directory爲lut,然後在lut包下新建directory爲dao,並在dao包下新建file爲IStudentDao.xml。(注意此映射文件是IStudentDao的映射,故包的結構需要和其對應的dao對應相同)。
IStudentDao.xml的代碼如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.ory//DTD Mapper 3.0//EN"
"htpp://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lut.dao.IStudentDao">
<!--查詢所有信息-->
<select id="findAll" resultType="student">
select * from student
</select>
<!--保存學生信息-->
<insert id="saveStudent">
insert into student(stuname,major,sex,age)values(#{stuname},#{major},#{sex},#{age})
<!--插入操作之後獲取插入數據id-->
<selectKey keyProperty="id" order="AFTER" resultType="int">
select last_insert_id();
</selectKey>
</insert>
<update id="updateStudent" parameterType="student">
update student set stuname=#{stuname},major=#{major},sex=#{sex},age=#{age} where id=#{id}
</update>
<delete id="deleteStudent" parameterType="int">
delete from student where id=#{id}
</delete>
</mapper>
3.最後在test包下的java中新建java爲com.lut.test.studentTest的Test類
studentTest.java爲:
package com.lut.test;
import com.lut.dao.IStudentDao;
import com.lut.domain.Student;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.junit.Test;
/**
* @author Roy
* @date 2020/6/23 16:30
*/
public class studentTest {
public InputStream in;
private SqlSession sqlSession;
private IStudentDao studentDao;
@Before//測試方法之前執行
public void init() throws Exception{
//讀取配置文件
in= Resources.getResourceAsStream("sqlMapConfig.xml");
//創建SQL SessionFactory工廠
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//使用工廠生產SQL Session對象
sqlSession=factory.openSession(true);
//使用sqlSession對象創建Dao接口的代理對象
studentDao=sqlSession.getMapper(IStudentDao.class);
}
@After//測試方法之後執行
public void destroy() throws Exception{
//釋放佔用的資源
sqlSession.close();
in.close();
}
//測試查詢方法
@Test
public void testFindAll(){
List<Student> students=studentDao.findAll();
for(Student student:students){
System.out.println("學生信息爲:");
System.out.println(student);
}
}
//測試保存方法
@Test
public void testSaveStudent(){
Student student=new Student();
student.setStuname("July");
student.setMajor("English");
student.setSex("F");
student.setAge(22);
System.out.println("保存之前的student爲:"+student);
studentDao.saveStudent(student);
System.out.println("保存之後的student爲:"+student);
}
//測試更新方法
@Test
public void testUpdateStudent(){
Student stu=new Student();
stu.setId(1);
stu.setStuname("roy");
stu.setMajor("ICS");
stu.setSex("M");
stu.setAge(24);
studentDao.updateStudent(stu);
}
//測試刪除方法
@Test
public void testDeleteStudent(){
studentDao.deleteStudent(2);
}
}
至此基於mybatis的增刪改查簡單功能就完成了。
其中建好的包結構如下圖所示: