编写一个MyBatis程序
一、什么是MyBatis
-
MyBatis是一款优秀的持久层框架
-
MyBatis几乎避免了所有JDBC代码和手动设置参数以及获取结果集的过程
-
MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的实体类映射成数据库中的记录
**持久化:**将程序数据在持久状态和瞬时状态转换的机制,即把数据(内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件、XML文件中等
JDBC就是一种持久化机制,文件IO也是一种持久化机制
**持久层:**完成持久化工作的代码块,–> dao层
二、 为什么需要MyBatis
- MyBatis有助于将数据存入数据库和从数据库中取数据
- MyBatis是一个半自动化的ORM框架(对象关系映射)
- MyBatis的优点:
- 简单易学(
我还每太学会,感觉也不怎么简单) - 灵活:SQL写在XML里,有利于统一管理
- 接触SQL与程序代码之间的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。提高了可维护性。
- 提供XML标签,支持编写动态SQL
- 简单易学(
三、 MyBatis程序编写
流程:搭建环境——导入MyBatis——编写代码——测试
-
构建数据库(MySQL)
CREATE DATABASE `mybatis`; USE `mybatis`; DROP TABLE IF EXISTS `user`; CREATE TABLE `user`( `id` INT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(30) NOT NULL, `pwd` VARCHAR(30) NOT NULL )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `user` VALUE (1,"Rigel","123456"), (2,"Grace","188520"), (3,"Savoki","123654");
-
新建一个Maven项目,删除src目录,导入Maven依赖(在pom.xml中)
-
创建一个module项目
-
编写配置文件
<?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核心配置文件--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&userUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="xiong1424"/> </dataSource> </environment> </environments> <!--每一个Mapper.xml都需要在MyBatis核心配置文件中注册!--> <mappers> <mapper resource="com/rigel/dao/UserMapper.xml" /> </mappers> </configuration>
-
编写MyBatis工具类
package com.rigel.utils; 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; //sqlSessionFactory --> sqlSession public class MyBatisUtils { private static SqlSessionFactory sqlSessionFactory; static{ try { //使用MyBatis的第一步:获取SQLSessionFactory对象 String resource="mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream); }catch (IOException e){ e.printStackTrace(); } } //获取SqlSession连接 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
-
编写代码
- 实体类
package com.rigel.pojo; public class User { private int id; private String name; private String pwd; public User(){ } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public String getName() { return name; } public String getPwd() { return pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
- dao接口
package com.rigel.dao; import com.rigel.pojo.User; import java.util.List; public interface UserDao { List<User> getUserList(); }
- 接口实现类
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace=绑定一个对应的dao/Mapper接口--> <mapper namespace="com.rigel.dao.UserDao"> <!--select查询语句--> <select id="getUserList" resultType="com.rigel.pojo.User"> select * from mybatis.user </select> </mapper>
-
测试
package com.rigel.dao; import com.rigel.pojo.User; import com.rigel.utils.MyBatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserDaoTest { @Test public void test(){ //第一步:获取SqlSession对象 SqlSession sqlSession = MyBatisUtils.getSqlSession(); //第二步:执行SQL UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); for (User user : userList) { System.out.println(user); } //关闭SqlSession sqlSession.close(); } }
结果:
-