Mybatis框架入门
一、Mybatis简介
二、Mybatis入门程序
1.环境准备:
-
jdk 8 +
-
MySQL 8+
-
maven-3.6.1
-
IDEA
2.数据库准备
CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(20) NOT NULL, `name` varchar(30) DEFAULT NULL, `pwd` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into `user`(`id`,`name`,`pwd`) values (1,'张三','123456'),(2,'李四','abcdef'),(3,'王五','987654');
3.项目结构如图
(mapper、xmlMapper、model包都是后期Mybatis逆向工程使用到的,前期可以不创建)
4.在Maven中导入相关依赖
<?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>org.example</groupId> <artifactId>MybitisDemo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> </dependencies> <build> <resources> <!-- resources文件 --> <resource>
<!-- 可能出现问题说明:Maven静态资源过滤问题 --> <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> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> </plugin> </plugins> </build> </project>
5.编写MyBatis核心配置文件Mybatis-config.xml
【 注意 】:在配置MySQL驱动时,mysql-connector-java 6 以上的driver应该改为 com.mysql.cj.jdbc.Driver
最后的<mappers>....</mappers>不要遗忘~
<?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"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper class ="com.kuang.dao.UserMapper"/> </mappers> </configuration>
6.创建实体类
(get和set方法的生成可以了解扩展一下Lombok插件的用法~)
package com.kuang.enity; public class User { private int id; private String name; private String pwd; public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
7.创建Mapper接口
package com.kuang.dao; import com.kuang.enity.User; import java.util.List; public interface UserMapper { List<User> selectById (); User selectById1 (int id); //mapper文件中的update,delete,insert语句是不需要设置返回类型的,它们都是默认返回一个int,所以返回值可以为Integer 或 void void insert (User user); void delete(int id); }
8.编写Mapper.xml配置文件
namespace注意一定不要写错!
(可以通过xml配置文件中的#{}和${}的区别了解扩展一下SQL注入——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"> <mapper namespace="com.kuang.dao.UserMapper"> <select id="selectById" resultType="com.kuang.enity.User"> select * from user </select> <select id="selectById1" resultType="com.kuang.enity.User"> select * from user where id = #{id} </select> <insert id="insert" parameterType="com.kuang.enity.User"> insert into user(id, name, pwd) values(#{id}, #{name}, #{pwd}) </insert> <delete id="delete"> delete from user where id = #{id} </delete> </mapper>
9.编写测试类
(点击运行 mybatisTest 方法即可对数据库进行数据读写了)
package com.kuang.test; import com.kuang.dao.UserMapper; import com.kuang.enity.User; import org.junit.Before; import org.junit.Test; //import com.kuang.Utils.MybatisUtils; 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; import java.util.List; import org.apache.ibatis.session.SqlSession; public class Mytest { private SqlSessionFactory sqlSessionFactory = null; @Before public void init() throws Exception { // 1. 创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 2. 加载SqlMapConfig.xml配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 3. 创建SqlSessionFactory对象 this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); } @Test public void mybatisTest() throws Exception { // 4. 创建SqlSession对象 //openSession():若括号里为true,则设置为事务自动提交。若不填则默认手动提交,将自动提交设置成false,然后调用sqlSession.commit()方法。 SqlSession sqlSession = sqlSessionFactory.openSession(true); //5.创建mapper,调用mapper里的方法 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //User user2 = new User(4,"马云","123"); //userMapper.insert(user2); //userMapper.delete(4); User user1 = userMapper.selectById1(2); //User users = sqlSession.selectOne(1); List<User> userList = userMapper.selectById(); for (User user:userList) { System.out.println(user); System.out.println("========================"); //System.out.println(user1); } //System.out.println(userList); // 7. 释放资源 sqlSession.close(); } }