1, Introductory case
MyBatis development preparation
Build MyBatis development environment and realize the first case
1. Prepare with Mybatis
download mybatis
2. Build MyBatis development environment
1) Create MySQL database and tables
Database name ssm; Table name student
Create table statement
CREATE TABLE `student` ( `id` int(11) NOT NULL , `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2) Create Maven project
Create maven project:
3) Add Maven coordinates
pom. Add maven coordinates to XML:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency>
4) Add Maven plugin
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins>
5) Write Student class
Create package com suyv. mybatis. Domain, create the Student class in the package
package com.suyv.mybatis.domain; public class Student { private Integer id; private String name; private String email; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", email='" + email + '\'' + ", age=" + age + '}'; } }
6) Write Dao interface StudentDao
Create com suyv,mybatis. Dao package, create StudentDao interface
package com.suyv.mybatis.dao; import com.suyv.mybatis.domain.Student; import java.util.List; public interface StudentDao { //Query all student data public List<Student> selectStudents(); }
7) Write Dao interface Mapper mapping file studentdao xml
matters needing attention:
- Create the file studentdao. In the dao package xml
- To StudentDao The XML file name is the same as the interface StudentDao, which is case sensitive.
<?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: Must have a value, a unique custom string Recommended: dao Fully qualified name of the interface --> <mapper namespace="com.suyv.mybatis.dao.StudentDao"> <!-- <select>: Query data, the label must be select sentence id: sql The user-defined name of the statement, which is recommended dao Method name in the interface, Use a name to indicate what to do sql sentence resultType: The data type of the returned result of the query statement, using the fully qualified class name --> <select id="selectStudents" resultType="com.suyv.mybatis.domain.Student"> <!--To execute sql sentence--> select id,name,email,age from student </select> </mapper>
8) Create MyBatis master profile
Create the resources directory under project src/main, and set the resources directory to resources root
Create the main configuration file: the name is mybatis xml
Note: the name of the main configuration file is user-defined, and the contents are as follows:
<?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> <!--to configure mybatis environment--> <environments default="mysql"> <!--id:Name of the data source--> <environment id="mysql"> <!--Configuring transaction types: Using JDBC Transaction (use) Connection (commit and rollback of)--> <transactionManager type="JDBC"/> <!--data source dataSource: Create database Connection object type: POOLED Connection pool using database --> <dataSource type="POOLED"> <!--Four elements of connecting to a database--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <!--tell mybatis To execute sql Position of the statement--> <mapper resource="com/suyv/mybatis/dao/StudentDao.xml"/> </mappers> </configuration>
9) Create test class MyBatisTest
src/test/java/com/suyv/mybatis/test / create mybatistest Java file
package com.suyv.mybatis.test; import com.suyv.mybatis.domain.Student; 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 org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MyBatisTest { @Test public void selectTest() throws IOException { //1.mybatis master configuration file String config = "mybatis.xml"; //2. Read the configuration file InputStream in = Resources.getResourceAsStream(config); //3. Create SqlSessionFactoryBuilder object to obtain SqlSession SqlSessionFactoryBuilder bulider = new SqlSessionFactoryBuilder(); //4. Create SqlSessionFactory object SqlSessionFactory factory = bulider.build(in); //5. [important] obtain the SqlSession object, and obtain the SqlSession from the SqlSessionFactory SqlSession sqlSession = factory.openSession(); //6. Execute sql statement List<Student> studentList = sqlSession.selectList("com.suyv.mybatis.dao.StudentDao"+"."+"selectStudents"); //7. Output results studentList.forEach(stu -> System.out.println(stu)); //8. Close SqlSession and release resources sqlSession.close(); } }
10) Execution results
2, Basic CURD
1.insert
1) Add method in StudentDao interface
public int insertStudent(Student student);
2)StudentDao. Adding sql statements to XML
<insert id="insertStudent"> insert into student(id,name,email,age) values(#{id},#{name},#{email},#{age}) </insert>
3) Add test method
@Test public void insertTest() throws IOException { //1.mybatis master configuration file String config = "mybatis.xml"; //2. Read the configuration file InputStream in = Resources.getResourceAsStream(config); //3. Create SqlSessionFactoryBuilder object to obtain SqlSession SqlSessionFactoryBuilder bulider = new SqlSessionFactoryBuilder(); //4. Create SqlSessionFactory object SqlSessionFactory factory = bulider.build(in); //5. [important] obtain the SqlSession object, and obtain the SqlSession from the SqlSessionFactory SqlSession sqlSession = factory.openSession(); //6. Execute sql statement and find the statement through sqlId Student student = new Student(); student.setId(1003); student.setName("Guan Yu"); student.setEmail("guanyv@163.com"); student.setAge(35); int nums = sqlSession.insert("com.suyv.mybatis.dao.StudentDao"+"."+"insertStudent",student); //mybatis does not commit transactions by default, so you need to manually commit transactions after insert, delete and update operations sqlSession.commit(); //8. Output results System.out.println("implement insert result:"+nums); //7. Close SqlSession and release resources sqlSession.close(); }
4) Execution results
IDEA console output:
The database results show:
2.update
1) Add method in StudentDao interface
public int updataStudent(Student student);
2)StudentDao. Adding sql statements to XML
<update id="updataStudent"> update student set age = #{age} where id=#{id} </update>
3) Add test method
@Test public void updateTest() throws IOException { String config = "mybatis.xml"; InputStream in = Resources.getResourceAsStream(config); SqlSessionFactoryBuilder bulider = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = bulider.build(in); SqlSession sqlSession = factory.openSession(); Student student = new Student(); student.setId(1003); student.setAge(25); int nums = sqlSession.update("com.suyv.mybatis.dao.StudentDao"+"."+"updataStudent",student); sqlSession.commit(); System.out.println("implement insert result:"+nums); sqlSession.close(); }
4) Execution results
IDEA console:
Database display results:
3.delete
1) Add method in StudentDao interface
public int deleteStudent(int id);
2)StudentDao. Adding sql statements to XML
<delete id="deleteStudent"> delete from student where id=#{id} </delete>
3) Add test method
@Test public void deleteTest() throws IOException { String config = "mybatis.xml"; InputStream in = Resources.getResourceAsStream(config); SqlSessionFactoryBuilder bulider = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = bulider.build(in); SqlSession sqlSession = factory.openSession(); int id = 1003; int nums = sqlSession.delete("com.suyv.mybatis.dao.StudentDao"+"."+"deleteStudent",id); sqlSession.commit(); System.out.println("implement delete result:"+nums); sqlSession.close(); }
4) Execution results
IDEA console:
Database display results:
3, MyBatis object analysis
1. Object usage
1) Resources class
The Resources class, as its name suggests, is a resource used to read resource files. There are many methods to return different types of IO stream objects by loading and parsing resource files.
2) Sqlsessionfactorybuilder class
The creation of SqlSessionFactory requires the use of the SqlSessionFactoryBuilder object
build() method. Because SqlSessionFactoryBuilder
After creating the factory object, the object completes its historical mission and can be destroyed. Therefore, the SqlSessionFactoryBuilder is generally used
The object is created as a local object within a method. When the method ends, the object is destroyed.
3) SqlSessionFactory interface
The SqlSessionFactory interface object is a heavyweight object (an object with high system overhead) and thread safe, so an application only needs one such object. establish
SqlSession requires the openSession() method of the SqlSessionFactory interface.
Open session (true): create a SqlSession with automatic submission function
Open session (false): create a SqlSession without automatic submission function, which needs to be submitted manually
openSession(): the same as openSession(false)
4) SqlSession interface
The SqlSession interface object is used to perform persistence operations. A SqlSession corresponds to a database session. A session starts with the creation of the SqlSession object and ends with the closing of the SqlSession object.
The SqlSession interface object is thread unsafe, so you need to call its close() method to close it immediately before the end of each database session. The session needs to be created again. SqlSession is created inside the method and closed after use.
2. Create a tool class
1) Create MyBatisUtil class
package com.suyv.mybatis.util; 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; public class MybatisUtil { //Define SqlSessionFactory private static SqlSessionFactory factory = null; static { //Create a SqlSessionFactory once using a static block try{ String config = "mybatis.xml"; //Read configuration file InputStream in = Resources.getResourceAsStream(config); //Create SqlSessionFactory object factory = new SqlSessionFactoryBuilder().build(in); }catch (Exception e){ factory = null; e.printStackTrace(); } } /* Get SqlSession object */ public static SqlSession getSqlSession(){ SqlSession session = null; if( factory != null){ session = factory.openSession(); } return session; } }
2) Using the MybatisUtil class
@Test public void testUtils() throws IOException { SqlSession session = MybatisUtil.getSqlSession(); List<Student> studentList = session.selectList( "com.suyv.mybatis.dao.StudentDao.selectStudents"); studentList.forEach( student -> System.out.println(student)); session.close(); }