Mybatis
环境:
JDK1.8
Mysql 5.7
maven 3.6.1
IDEA
框架:配置文件的,最好的方式:看官网
1、简介
1.1、什么是Mybatis
- MyBatis 是一款优秀的持久层框架,
- 它支持自定义 SQL、存储过程以及高级映射。
- MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集。
- MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
如何获取Mybatis?
maven仓库
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
1.2、数据持久化
数据持久化
- 持久化就是将程序的数据在持久状态和瞬时状态转换的过程
- 内存:断电即失
- 数据库,io文件持久化
- 生活:冷藏
为什么需要持久化?
扫描二维码关注公众号,回复:
11503439 查看本文章
- 有一些对象,不能让它丢掉
- 内存太贵
1.3、持久层
Dao层、service层、controller层
- 完成持久化工作的代码块
- 层界限十分明显
1.4、为什么需要Mybatis
- 方便
- 传统的JDBC代码太复杂了,简化—>框架
- 帮助程序员将数据存入到数据库中
- 不用Mybatis也可以,更容易上手。
2、第一个Mybatis程序
思路:搭建环境–>导入Mybatis—>
2.1、搭建环境
2.2、创建一个模块
-
编写mybatis的核心配置文件
<?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/test?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/qwc/dao/UserMapper.xml"/> </mappers> </configuration>
-
编写mybatis工具类
package com.qwc.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 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了SqlSessionFactory. 顾名思义。我们就可以从中获得SqlSession 的实例了。 // SqlSession完全包含J面向数据库执行SQL命令所需的所有方法。 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }
2.3、编写代码
-
实体类
package com.qwc.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 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 + '\'' + '}'; } }
-
Dao接口
package com.qwc.dao; import com.qwc.pojo.User; import java.util.List; public interface UserMapper { //查询全部用户 List<User> getUserList(); //根据id查询用户 User getUserById(int id); //insert一个用户 int addUser(User user); //修改用户 int updateUser(User user); //删除用户 int deleteUser(int id); }
-
接口实现类用mapper
<?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绑定一个对应的dao/mapper接口--> <mapper namespace="com.qwc.dao.UserMapper"> <!-- id对应接口方法的名称--> <select id="getUserList" resultType="com.qwc.pojo.User"> select * from user </select> <select id="getUserById" parameterType="int" resultType="com.qwc.pojo.User"> select * from user where id= #{id} </select> <!-- 对象中的属性,可以直接取出来--> <insert id="addUser" parameterType="com.qwc.pojo.User"> insert into user (id,name,pwd) values(#{id},#{name},#{pwd}); </insert> <update id="updateUser" parameterType="com.qwc.pojo.User"> update user set name =#{name},pwd=#{pwd} where id=#{id}; </update> <delete id="deleteUser" parameterType="int"> delete from test.user where id=#{id}; </delete> </mapper>
2.4、测试
-
编写测试类
package com.qwc.dao; import com.qwc.pojo.User; import com.qwc.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserDaoTest { @Test public void test01getUserList() { //1.获得sqlsession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); try { //方式一:getMapper UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); //方式二 // List<User> userList = sqlSession.selectList("com.qwc.dao.UserMapper.getUserList"); for (User user : userList) { System.out.println(user); } } catch (Exception e) { e.printStackTrace(); } finally { //关闭sqlsession sqlSession.close(); } } @Test public void test02getUserById() { SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); sqlSession.close(); } @Test public void test03addUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int res = mapper.addUser(new User(4, "cat", "123123")); if(res>0){ System.out.println("插入成功"); } //提交事务 sqlSession.commit(); //关闭事务 sqlSession.close(); } @Test public void test04updateUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.updateUser(new User(4,"dog","123456")); sqlSession.commit(); sqlSession.close(); } @Test public void test05deleteUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.deleteUser(4); sqlSession.commit(); sqlSession.close(); } }