MyBatis——入门及第一个小程序

川长思鸟来 2022-12-12 15:26 330阅读 0赞

MyBatis 简介

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,是一个基于Java的持久化框架。

  • 持久化: 可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏,在断电或者其他情况下,重新开启系统仍然可以读取到这些数据。

优点:

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。
    sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
  • 解除sql与程序代码的耦合:通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql。

缺点:

  • 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
  • SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
  • 框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
  • 二级缓存机制不佳

Mybatis官方文档: https://mybatis.org/mybatis-3/zh/getting-started.html

Github地址:https://github.com/mybatis/mybatis-3

MYbatis快速入门

一、IDEA新建maven工程mybatis_1,pom文件中添加相关依赖包:

在这里插入图片描述

  1. <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>3.5.4</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  8. <dependency>
  9. <groupId>mysql</groupId>
  10. <artifactId>mysql-connector-java</artifactId>
  11. <version>8.0.15</version>
  12. </dependency>
  13. <!--junit-->
  14. <dependency>
  15. <groupId>junit</groupId>
  16. <artifactId>junit</artifactId>
  17. <version>4.12</version>
  18. </dependency>

DEA 默认是不支持 MyBatis 开发的,需要自己下载第三方插件来支持,自己学习的话free mybatis plugin即可。

在这里插入图片描述
注意:需要重启IDEA

二、数据准备工作

创建一个数据库test_w,编码方式设置为 UTF-8,然后再创建一个名为user的表,插入几行数据:

  1. drop database if exists test_w;
  2. create database test_w default CHARACTER set utf8
  3. use test_w;
  4. create table user
  5. (
  6. id int auto_increment primary key,
  7. username varchar(20) not null,
  8. password varchar(20) not null
  9. );
  10. insert into user values(1,'wanwei','1234');
  11. insert into user values(2,'wanwei2','1234');
  12. insert into user values(3,'wanwei3','1234');
  13. insert into user values(4,'wanwei4','1234');
  14. commit;

三、创建user实体类

  1. package com.ftj.dao;
  2. public class User {
  3. private int id;
  4. private String username;
  5. private String password;
  6. public User(int id, String username, String password) {
  7. this.id = id;
  8. this.username = username;
  9. this.password = password;
  10. }
  11. public User() {
  12. }
  13. public int getId() {
  14. return id;
  15. }
  16. public void setId(int id) {
  17. this.id = id;
  18. }
  19. public String getUsername() {
  20. return username;
  21. }
  22. public void setUsername(String username) {
  23. this.username = username;
  24. }
  25. public String getPassword() {
  26. return password;
  27. }
  28. public void setPassword(String password) {
  29. this.password = password;
  30. }
  31. @Override
  32. public String toString() {
  33. return "User{" +
  34. "id=" + id +
  35. ", username='" + username + "'" +
  36. ", password='" + password + "'" +
  37. "}";
  38. }
  39. }

四、配置文件 mybatis-config.xml

主要作用是提供连接数据库用的驱动,数据名称,编码方式,账号密码等

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <!-- 别名 -->
  5. <typeAliases>
  6. <package name="com.ftj.dao"/>
  7. </typeAliases>
  8. <!-- 数据库环境 -->
  9. <environments default="development">
  10. <environment id="development">
  11. <transactionManager type="JDBC"/>
  12. <dataSource type="POOLED">
  13. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  14. <property name="url" value="jdbc:mysql://localhost:3306/test_w?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false"/>
  15. <property name="username" value="root"/>
  16. <property name="password" value=""/>
  17. </dataSource>
  18. </environment>
  19. </environments>
  20. <!-- 映射文件 -->
  21. <mappers>
  22. <mapper resource="User.xml"/>
  23. </mappers>
  24. </configuration>

六、配置文件 User.xml

编写一个mybatis的工具类(可以查看中文文档来创建:目的就是读取配置文件,用SqlSessionFactory(工厂模式)来创建SessionFactory,这里可以用静态代码块来加载配置文件 )

  1. package com.ftj.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. public class MybatisUtils {
  9. private static SqlSessionFactory sqlSessionFactory;
  10. static {
  11. try {
  12. //使用Mybatis第一步:获取SqlSessionFactory对象
  13. String resource = "mybatis-config.xml";
  14. InputStream is = Resources.getResourceAsStream(resource);
  15. sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. //有了SqlSessionFactory,我们就可以获取SqlSession的实例了
  21. public static SqlSession getSqlSession(){
  22. return sqlSessionFactory.openSession();
  23. }
  24. }

七、配置文件 User.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.ftj.dao">
  4. <select id="getUserList" resultType="User">
  5. select * from user
  6. </select>
  7. <select id="findUserById" resultType="User">
  8. select * from user where id = #{id}
  9. </select>
  10. <delete id="deleteUser">
  11. delete from user where id =#{id}
  12. </delete>
  13. <update id="updateUser">
  14. update user set username=#{username},password=#{password}
  15. where id =#{id}
  16. </update>
  17. <insert id="insertUSer" >
  18. insert into user(id,username,password)
  19. values(#{id},#{username},#{password})
  20. <selectKey resultType="int" keyProperty="id" order="AFTER">
  21. select last_insert_id();
  22. </selectKey>
  23. </insert>
  24. </mapper>

八、编写测试类

  1. package com.ftj.dao;
  2. import com.ftj.utils.MybatisUtils;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.junit.Test;
  5. import java.io.IOException;
  6. import java.util.List;
  7. public class UserDaoTest {
  8. @Test
  9. public void selectAllTest() throws IOException {
  10. //获取SqlSession对象
  11. // SqlSession sqlSession = MybatisUtils.getSqlSession();
  12. //方式1:getMapper 执行SQL
  13. //UserDao userDao = sqlSession.getMapper(UserDao.class);//反射
  14. //List<User> userList = userDao.getUserList();
  15. //方式2:
  16. // 根据 mybatis-config.xml 配置的信息得到 sqlSessionFactory
  17. // String resource = "mybatis-config.xml";
  18. // InputStream inputStream = Resources.getResourceAsStream(resource);
  19. // SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  20. // 然后根据 sqlSessionFactory 得到 session
  21. SqlSession session = MybatisUtils.getSqlSession();
  22. // 最后通过 session 的 selectList() 方法调用 sql 语句 listStudent
  23. List<User> userList = session.selectList("getUserList");
  24. //delete
  25. for (User user : userList) {
  26. System.out.println(user);
  27. }
  28. //关闭SqlSession
  29. session.close();
  30. }
  31. @Test
  32. public void insertTest() {
  33. SqlSession session = MybatisUtils.getSqlSession();
  34. User user = new User();
  35. // user.setId(5);
  36. user.setUsername("zhangsan");
  37. user.setPassword("Huawei1234");
  38. session.insert("insertUSer", user);
  39. session.commit();
  40. session.close();
  41. }
  42. @Test
  43. public void deleteTest() {
  44. SqlSession session = MybatisUtils.getSqlSession();
  45. session.delete("deleteUser",5);
  46. session.commit();
  47. session.close();
  48. }
  49. @Test
  50. public void findUserById(){
  51. SqlSession session = MybatisUtils.getSqlSession();
  52. List<User> userlist = session.selectList("findUserById", 6);
  53. for(User user : userlist){
  54. System.out.println(user);
  55. }
  56. session.close();
  57. }
  58. }

遇到的问题

1、可能会遇到的问题就是:maven造成的 .xml文件导出问题(在target目录中没法找到这份文件,从而导致缺少映射的关系,报错,解决办法:就是在pom.xml中增加下面的代码:)

  1. <!--在build中配置resources,来防止我们资源导出失败的问题-->
  2. <build>
  3. <resources>
  4. <resource>
  5. <directory>src/main/resources</directory>
  6. <includes>
  7. <include>**/*.properties</include>
  8. <include>**/*.xml</include>
  9. </includes>
  10. <filtering>false</filtering>
  11. </resource>
  12. <resource>
  13. <directory>src/main/java</directory>
  14. <includes>
  15. <include>**/*.properties</include>
  16. <include>**/*.xml</include>
  17. </includes>
  18. <filtering>false</filtering>
  19. </resource>
  20. </resources>
  21. </build>

2、 java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized

mybatis-config.xml中数据库连接url没有指定时区

  1. <property name="url" value="jdbc:mysql://localhost:3306/test_w?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false"/>

发表评论

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

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

相关阅读