用Idea搭建一个Mybatis项目

清疚 2022-12-11 15:11 323阅读 0赞

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

官方文档

https://mybatis.org/mybatis-3/zh/index.html
最好的官方文档之一,一篇文档读懂,根本不用看其他任何教程

环境

window10
IntelliJ Idea(2020.2)
JDK 8
MySql server

新建项目

打开idea,file -> new -> Project -> maven

在这里插入图片描述

点击next,下一步设置项目名和组织名

在这里插入图片描述
项目名(name)随意,GroupId一般是域名的倒写,一般和你的包结构一致
其实随便填就行

点击Finish,项目新建成功

在这里插入图片描述
图片仅供参考,我是在项目中创建了子Module,不必模仿,用你们新建的项目就够了

数据库中创建测试用的表

  1. DROP TABLE IF EXISTS `user`;
  2. CREATE TABLE `user` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT,
  4. `name` varchar(32) NOT NULL COMMENT '用户名称',,
  5. `pwd` varchar(256) DEFAULT NULL COMMENT '地址',
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8;
  8. -- ----------------------------
  9. -- Records of user
  10. -- ----------------------------
  11. INSERT INTO `user` VALUES ('1', '王五',‘123’);
  12. INSERT INTO `user` VALUES ('10', '张三', '123');
  13. INSERT INTO `user` VALUES ('16', '张小明', 123’);
  14. INSERT INTO `user` VALUES ('22', '陈小明', 123’);
  15. INSERT INTO `user` VALUES ('24', '张三丰', 123’);
  16. INSERT INTO `user` VALUES ('25', '陈小明', 123’);
  17. INSERT INTO `user` VALUES ('26', '王五', 123’);

项目中创建表对应的实体类

新建package名叫model
新建class User

  1. package com.term.model;
  2. import java.io.Serializable;
  3. public class User implements Serializable {
  4. private int id;
  5. private String name;
  6. private String pwd;
  7. public User() {
  8. }
  9. public User(int id, String name, String pwd) {
  10. this.id = id;
  11. this.name = name;
  12. this.pwd = pwd;
  13. }
  14. public int getId() {
  15. return id;
  16. }
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public String getPwd() {
  27. return pwd;
  28. }
  29. public void setPwd(String pwd) {
  30. this.pwd = pwd;
  31. }
  32. @Override
  33. public String toString() {
  34. return "User{" +
  35. "id=" + id +
  36. ", name='" + name + '\'' +
  37. ", pwd='" + pwd + '\'' +
  38. '}';
  39. }
  40. }

创建mapper接口

新建package名叫dao
新建interface名叫UserDao

  1. package com.term.dao;
  2. import com.term.model.User;
  3. import java.util.List;
  4. import java.util.Map;
  5. public interface UserDao {
  6. List<User> getAllUsers();
  7. int updateUser(User user);
  8. int addUser(User user);
  9. int deleteUser(int id);
  10. User getOneUser(Map<String, Object> map);
  11. List<User> getUsersByNameLike(String name);
  12. }

以上内容和普通的JDBC一致
接下来引入Mybatis
打开项目的pom文件,导入Mybatis依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.term</groupId>
  7. <artifactId>MybatisStudy</artifactId>
  8. <packaging>pom</packaging>
  9. <version>1.0-SNAPSHOT</version>
  10. <dependencies>
  11. <dependency>
  12. <groupId>mysql</groupId>
  13. <artifactId>mysql-connector-java</artifactId>
  14. <version>5.1.47</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.mybatis</groupId>
  18. <artifactId>mybatis</artifactId>
  19. <version>3.5.2</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>junit</groupId>
  23. <artifactId>junit</artifactId>
  24. <version>4.12</version>
  25. </dependency>
  26. </dependencies>
  27. <build>
  28. <resources>
  29. <resource>
  30. <directory>src/main/resources</directory>
  31. <includes>
  32. <include>**/*.properties</include> <include>**/*.xml</include>
  33. </includes>
  34. <filtering>true</filtering>
  35. </resource>
  36. <resource>
  37. <directory>src/main/java</directory>
  38. <includes>
  39. <include>**/*.properties</include> <include>**/*.xml</include>
  40. </includes>
  41. <filtering>true</filtering>
  42. </resource>
  43. </resources>
  44. </build>
  45. </project>

如上所示,我导入了mybatis 3.5.2 jar包,和mybatis所依赖的Junit、mysql
中的内容时配置文件扫描,以免编译器不加载配置文件

创建Mybatis核心配置文件

在项目的resources文件夹中创建mybatis-config.xml
别问我为什么叫这个名字,其实想叫什么叫什么,只是因为官方文档叫这个名字,所有大家都喜欢用这个名字,显得比较专业

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <environments default="development">
  7. <environment id="development">
  8. <transactionManager type="JDBC"/>
  9. <dataSource type="POOLED">
  10. <property name="driver" value="com.mysql.jdbc.Driver"/>
  11. <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&autoReconnect=true"/>
  12. <property name="username" value="root"/>
  13. <property name="password" value="root"/>
  14. </dataSource>
  15. </environment>
  16. </environments>
  17. <mappers>
  18. <mapper resource="com/term/dao/UserMapper.xml"/>
  19. </mappers>
  20. </configuration>

简单解释一下,这是mybatis最简单的配置,
environments便签是环境配置,如上主要是dataSource连接数据库的参数,以及transactionManager决定数据库事务处理方式
mappers标签用来指定mapper.xml,如上
意思就是我待会会在com/term/dao中创建一个Mapper.xml实现数据库具体操作
如果不配置这各标签,那么mapper将不生效
就这些

MybatisUtils

写一个全局的工具类,静态返回初始化好的SqlSession对象:

  1. package com.term.utils;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. /** * 初始化sqlSessionFactory,并返回sqlSession */
  9. public class MybatisUtils {
  10. //SqlSessionFactory 对象最好是全局的单例变量
  11. private static SqlSessionFactory sqlSessionFactory;
  12. static {
  13. try {
  14. String resource = "mybatis-config.xml";
  15. InputStream inputStream = Resources.getResourceAsStream(resource);
  16. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. //每个请求初始化一个SqlSession,调用这个方法
  22. public static SqlSession getSqlSession() {
  23. return sqlSessionFactory.openSession();
  24. }
  25. //得到支持自动提交的SqlSession对象
  26. public static SqlSession getAutoCommitSqlSession(){
  27. return sqlSessionFactory.openSession(true);
  28. }
  29. }

创建mapper.xml

刚才我们写了一个UserDao接口,并定义了一些数据库操作方法,mybatis要求我们使用xml文件的方式去实现这个接口

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!-- namespace指定你要实现的mapper接口全名 -->
  6. <mapper namespace="com.term.dao.UserDao">
  7. <!--标签名是操作方式,id与接口中方法名一致 resultType指定返回值类型的全名-->
  8. <select id="getAllUsers" resultType="com.term.model.User">
  9. <!--标签内写sql语句-->
  10. select * from user
  11. </select>
  12. <update id="updateUser" parameterType="com.term.model.User">
  13. <!--用#{ }传入参数,实体类的属性可以直接用属性名调用,方法参数可以直接用参数名-->
  14. update user set name=#{ name},pwd=#{ pwd} where id=#{ id}
  15. </update>
  16. <insert id="addUser" parameterType="com.term.model.User">
  17. insert into user (id,name,pwd) values (#{ id},#{ name},#{ pwd})
  18. </insert>
  19. <delete id="deleteUser" parameterType="int">
  20. delete from user where id=#{ id}
  21. </delete>
  22. <select id="getOneUser" parameterType="map" resultType="com.term.model.User">
  23. select * from user where id=#{ id}
  24. </select>
  25. <select id="getUsersByNameLike" parameterType="String" resultType="com.term.model.User">
  26. select * from user where name like #{ name}
  27. </select>
  28. </mapper>

好了,写完了

使用JUNIT测试

  1. package com.term.dao;
  2. import com.term.model.User;
  3. import com.term.utils.MybatisUtils;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.junit.Test;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. /** * Mybatis 增删改查Junit */
  10. public class UserDaoTest {
  11. @Test
  12. public void testGetAllUser() {
  13. final SqlSession sqlSession = MybatisUtils.getSqlSession();
  14. UserDao userDao = sqlSession.getMapper(UserDao.class);
  15. List<User> users = userDao.getAllUsers();
  16. for (User user : users) {
  17. System.out.println(user);
  18. }
  19. sqlSession.close();
  20. }
  21. @Test
  22. public void testAddUser() {
  23. final SqlSession sqlSession = MybatisUtils.getSqlSession();
  24. UserDao userDao = sqlSession.getMapper(UserDao.class);
  25. userDao.addUser(new User(1, "li", "zhang3"));
  26. sqlSession.commit();
  27. sqlSession.close();
  28. }
  29. @Test
  30. public void testUpdateUser() {
  31. final SqlSession sqlSession = MybatisUtils.getSqlSession();
  32. final UserDao userDao = sqlSession.getMapper(UserDao.class);
  33. userDao.updateUser(new User(2, "lisi", "lisq"));
  34. //增删改需要提交事务
  35. sqlSession.commit();
  36. sqlSession.close();
  37. }
  38. @Test
  39. public void testDelUser(){
  40. final SqlSession sqlSession = MybatisUtils.getSqlSession();
  41. final UserDao userDao = sqlSession.getMapper(UserDao.class);
  42. userDao.deleteUser(1);
  43. //增删改需要提交事务
  44. sqlSession.commit();
  45. sqlSession.close();
  46. }
  47. @Test
  48. public void testGetOneUser(){
  49. final SqlSession sqlSession = MybatisUtils.getSqlSession();
  50. final UserDao userDao = sqlSession.getMapper(UserDao.class);
  51. Map<String, Object> map = new HashMap<>();
  52. map.put("id", 2);
  53. System.out.println(userDao.getOneUser(map));
  54. sqlSession.close();
  55. }
  56. @Test
  57. public void testGetUsersByNameLike(){
  58. final SqlSession sqlSession = MybatisUtils.getSqlSession();
  59. final UserDao userDao = sqlSession.getMapper(UserDao.class);
  60. List<User> users = userDao.getUsersByNameLike("%l%");
  61. for (User user : users)
  62. System.out.println(user);
  63. sqlSession.close();
  64. }
  65. }

感谢大家收看

发表评论

表情:
评论列表 (有 0 条评论,323人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ideaSSM项目

    前言 今天需要快速搭建一个ssm的工程,写一个小demo,但是因为太久没写变得很生疏,于是在网上找到了这篇文章,便转载并修改添加了一些东西,当做笔记,方便以后查阅使用。