Mybatis初学及使用
2021/7/21 23:36:04
本文主要是介绍Mybatis初学及使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
什么是Mybatis?
它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低。Mybatis也是SSM中唯一一个官方有中文文档的框架。
文档地址:https://mybatis.org/mybatis-3/zh/index.html
学Mybatis的作用
可以简化对数据库操作的动作、简化了JDBC操作、可以灵活的操作数据库、操作事务。
Mybatis使用
搭建Mybatis环境
Mybatis是操作数据库的框架、要使用Mybatis得先有个库才能玩起来!所以我们得先弄个存储数据的数据表!
//创建数据库 create database mybatis use mybatis //创建用户表 create table user( id int, name varchar(20), paw varchar(20) ) //插入数据 insert into user values(1,'刘德华','666666'),(2,'张学友','888888'),(3,'彭于晏','686868');
创建maven项目
接下来是Java这边的环境搭建、创建maven项目、导入相关jar包、jar包最好用稳定的版本、一味追求高版本是在替后人找bug。
<!--mybatis包-jar --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--数据库连接驱动jar --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--单元测试jar --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
编写配置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> <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"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!-- 映射配置文件,SqlMapper.xml配置文件下主要是配置对数据库的操作 --> <mappers> <mapper resource="com/ling/dao/SqlMapper.xml"/> </mappers> </configuration>
创建工具类将配置文件加载进Mybatis的SqlSessionFactoryBuilder类中构建出SqlSessionFactory,从SqlSessionFactory中获取SqlSession,SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { String resource = "mybatis_config.xml"; try { InputStream input = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(input); } catch (IOException e) { e.printStackTrace(); } } //开启会议、返回一个会议得以操作数据库 public static SqlSession getSession(){ return sqlSessionFactory.openSession(); } }
创建一个用户实体类对象
public class User { private Integer id; private String name; private String pw; public User() { } public User(Integer id, String name, String pw) { this.id = id; this.name = name; this.pw = pw; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPw() { return pw; } public void setPw(String pw) { this.pw = pw; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pw='" + pw + '\'' + '}'; } }
创建dao层操作接口,先来个CRUD(增删改查)操作
public interface UserDao { //查询所有用户 public List<User> selectUser(); //添加用户 public int addUser(User user); //删除用户 public int deleteUser(int id); //修改用户 public int updateUser(User user); }
接下来就是编写刚刚的Mybatis核心配置文件中的映射文件,数据库操作配置文件,主要的操作还是在这个配置文件里,上面的接口只是媒介方便我们调用。
<?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.ling.dao.UserDao"> <!-- 查询所有用户信息,返回类型resultType--> <select id="selectUser" resultType="com.ling.pojo.User"> select * from user </select> <!--添加一个用户--> <insert id="addUser" parameterType="com.ling.pojo.User" > insert into user values(#{id},#{name},#{pw}) </insert> <!--修改一个用户信息--> <update id="deleteUser" parameterType="int" > delete from user where id = #{id} </update> <!--删除一个用户--> <delete id="updateUser" parameterType="com.ling.pojo.User" > update user set name = #{name},pw = #{pw} where id = #{id} </delete> </mapper>
- namespace 十分重要,不能写错!
- namespace的值绑定的是dao层数据库操作接口、从而可以在调用接口方法时相当于调用配置文件中相对应的操作。(初学Mybatis理解,往后学了Mybatis就不是这么想了可能)
- 映射中不同的标签对应着不同的操作。
- parameterType的值对应着参数类型
- resultType的值对应着返回类型
- 操作标签的id值必须得跟接口的方法相对应,不然调用不上
- #{}是拿参数的值、如果参数是对象的话可以直接拿到对象中的属性值、如果是基本类型就通过参数名直接拿到参数。
最后测试操作
//获取session SqlSession session = MybatisUtils.getSession(); //由session得到相对的映射 UserDao mapper = session.getMapper(UserDao.class); /* 测试查询所有用户 * */ @Test public void selectuser(){ //操作映射中对应的执行方法 List<User> users = mapper.selectUser(); for (User s:users) { System.out.println(s.toString()); } } /* 测试添加用户 * */ @Test public void adduser(){ //操作映射中对应的执行方法 User user = new User(4, "黄凯芹", "123456"); int i = mapper.addUser(user); System.out.println(i == 1? "添加成功!":"添加失败!"); //提交事务 session.commit(); //关闭内存 session.close(); } /* 测试查询所有用户 * */ @Test public void updateUser(){ //操作映射中对应的执行方法 User user = new User(3, "刘德华", "68686"); int i = mapper.updateUser(user); System.out.println(i == 1 ? "修改成功!":"修改失败!"); session.commit(); session.close(); } /* 测试查询所有用户 * */ @Test public void deleteUser(){ //操作映射中对应的执行方法 int i = mapper.deleteUser(4); System.out.println(i == 1? "删除成功!":"删除失败!"); session.commit(); session.close(); } Caused by: java.io.IOException: Could not find resource com/ling/dao/SqlMapper.xml
注意点:增、删、改操作需要提交事务!不提交事务的话操作将无法在数据库生效、程序返回的提示并不能说明已经成功修改数据库、要数据库发生改变才是。
可能出现Maven静态资源过滤问题、出错代码类似
Caused by: java.io.IOException: Could not find resource com/ling/dao/SqlMapper.xml
出现这个问题就在项目的pox文件中加入以下代码
<resources> <resource> <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>
如有错漏地方望指点!
这篇关于Mybatis初学及使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19Java前端后端分离学习指南
- 2024-11-19Java全栈学习:从入门到实践
- 2024-11-19Java微服务系统学习入门指南
- 2024-11-19Java微服务学习:入门与实践指南
- 2024-11-19Java学习:初学者必备指南
- 2024-11-19Java医疗系统学习:从入门到初级实战教程
- 2024-11-19SpringCloud Alibaba入门教程:轻松搭建微服务架构
- 2024-11-19SSM框架入门教程:轻松搭建Java企业级应用
- 2024-11-19订单系统学习:新手入门指南
- 2024-11-19读写分离学习:轻松入门与实战指南