Mybatis自学过程
第一步:搭建环境(创建并连接数据库;引入必要依赖;)
一.mybatis介绍
首先mybatis是简化jdbc的工具,Java框架所作的事便是简化各个项目在一开始需要搭建的繁杂环境。如果每个项目都是由java基础开始编写,那将会是一项非常复杂且庞大的工程,框架就是为此而生的,加快项目的生成
要想使用mybatis,首先要有Java的环境(jdk)以及Java的编译工具(idea等);其次要明白maven的创建意义是为了项目的快速搭建并习惯使用maven;当我们有了一个合格的代码构造理念后就可以开始mybatis的创建了
二.首先创建一个数据库
在这里创建一个简单的数据库,可以使用sql语句也可直接在idea里手动创建表
注意:
1.vachar类型要记得规定大小:name varchar(20)
2.使用sql语句创建的记着要连接数据库至idea
3.连接数据库不成功可能是没有将mysql的服务打开(我是将服务设置为自动打开)
三.引入依赖(pom.xml)
3.1 mybatis依赖
使用mybatis所需要最基本的依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
3.2 mysql-connector-java依赖
mysql提供的连接器,用来连接java的
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
3.3 juint依赖
引入junit依赖最重要的一点就是可以执行单元测试;
@Test注解可以让我们不再困在main方法里,比如现在要分别测试 增、删、查、改的四种代码,如果要用main方法就只能一个一个写,写完还要注释掉再粘贴另一个代码去测试;
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
如果没有引入junit的依赖会报这个错
3. 检查依赖是否已经引入
在Dependencies中检查是否已经引入我们所需要的依赖(如果是在最外层的pom.xml中引入的依赖,一定要记着看一眼)
第二步:配置xml,myUtils
一.mybatis-config.xml
1.1 mybatis-config.xml是对mybati的核心配置
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
1.2 db.properties
在这里可以使用db.properties,将本来需要在value中输入的复杂的值简化,在后面ssm的学习中也将简化代码(最后会讲如何使用)
<properties resource="db.properties"/>
1.3 下面这个mybatis-config.xml是我配置好的
driver中可能会出现的错误:
com.mysql.jdbc.Driver 是 mysql-connector-java 5中的,com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6以及以上
<?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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sai_mysql?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/sai/dao/userMapper.xml"/>
</mappers>
</configuration>
二.mybatisUtils
初始化工具类MyBatisUtils:
- 帮助我们初始化SqlSessionFactory这个对象,同时让SqlSessionFactory全局唯一;
- 获得SqlSession对象的方法;
- 关闭SqlSession对象的方法;
public class mybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//SqlSession 完全包括了面向数据库执行SQL命令所需要的所有方法,我们就可以从中获取SqlSession的实例了
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
第三步:编码
一 .实体类user
alt+insert快速创建:构造方法;get()和set()方法;toString()方法(最后还有一种更简单的方法)
id,name,password对应数据库中users表中的数据(这里建议将实体类大写,一开始我觉的没有什么,但事后面的测试中感觉容易搞乱)
public class user {
private int id;
private String name;
private String password;
public user() {
}
public user(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "user{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
二.userMapper接口
Mapper即是我们之前学过或者了解过的dao,只不过后面会写成mapper包(具体原因我还不知道),使用方式也是一样在测试类中调用usermapper接口
//这是最基本的四种:增删查改
public interface userMapper {
//查询全部用户
List<user> getUserList();
//添加一个用户
int addUser(user user);
//更新
int updateUser(user user);
//删除用户
int deleteUser(int id);
}
三.userMapper.xml
namespace=绑定一个对应的Dao/Mapper接口
在写userMapper.xml时大家也应该发现了中间那部分就是sql语句,在后面的运用中可能需要繁杂的userMapper.xml的编写,如果中间sql语句都写错了,那程序一定运行不了,所以我们可以先用sql语句执行成功后再回来整理思路编写userMapper.xml
<mapper namespace="com.sai.dao.userMapper">
<select id="getUserList" resultType="user">
select * from sai_mysql.users
</select>
<insert id="addUser" parameterType="user">
insert into users (id,name,password) value (#{id},#{name},#{password})
</insert>
<update id="updateUser" parameterType="user">
update users set name=#{name},password=#{password} where id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
</mapper>
四.userMapperTest测试类
实例化sqlSession,用sqlSession调用方法实现测试
一定要记得关闭sqlSession哦~~
sqlSession.close();
public class userMapperTest {
@Test
public void getUserList(){
SqlSession sqlSession = mybatisUtils.getSqlSession();
userMapper mapper = sqlSession.getMapper(userMapper.class);
List<user> userList = mapper.getUserList();
for (user user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void addUser(){
SqlSession sqlSession = mybatisUtils.getSqlSession();
userMapper mapper = sqlSession.getMapper(userMapper.class);
int res = mapper.addUser(new user(4, "小明", "xm123"));
if (res>0){
System.out.println("插入users成功~~");
}
sqlSession.commit();
sqlSession.close();
}
@Test
public void updateUser(){
SqlSession sqlSession = mybatisUtils.getSqlSession();
userMapper mapper = sqlSession.getMapper(userMapper.class);
mapper.updateUser(new user(3,"小红","xh123"));
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser(){
SqlSession sqlSession = mybatisUtils.getSqlSession();
userMapper mapper = sqlSession.getMapper(userMapper.class);
mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
}
补充:
一.db.properties的使用
在编写mybatis-config.xml时我们容易写错driver和url,而且这两个不容易看出错误,所以使用db.properties
1.首先创建一个db.properties文件,并在里面写下driver等的信息,注意这里的&和xml的&符号的区别(mybatis-config.xml里的&是``)
<!-- mybatis-config.xml里的&是-->
&
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/sai_mysql?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
二.lombok依赖
首先不建议使用,仅供了解
首先在没有引入依赖时user实体类是这样的(忽略problems)
1.在pom.xml中引入依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
</dependencies>
2.常用注解
引入lombok的依赖
@Data : 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法
@AllArgsConstructor : 注在类上,提供类的全参构造
@NoArgsConstructor : 注在类上,提供类的无参构造
@Setter : 注在属性上,提供 set 方法
@Getter : 注在属性上,提供 get 方法
注释后可以发现它帮我们做了构造方法;get(),set();toString()方法等(忽略problems)
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//具体注释
@Data
@AllArgsConstructor
@NoArgsConstructor
public class user{
private int id;
private String name;
private String password;
}
总结
第一次写md,是一件复杂切繁琐的事,虽然在依赖以及mybatisUtils中还是有许多不理解的地方,但经过此次复习我也算是会写简单的mybatis了,在之后学习完ssm后依然会复习总结,这种方式确实是一个不错的学习方式
最后希望大家看完后可以揪出我的错误以及不详细的地方,这样我才能够更加详细的了解自己犯的错误以及学习到新的东西!