MyBatis是一款优秀的持久层(三层架构中的数据访问层dao)框架,用于简化JDBC的开发(几乎免除了JDBC代码以及设置参数和获取结果集的工作)。
MyBatis是在Java程序中编写sql语句,再将这条sql语句发送给数据库执行,数据库再将执行的结果返回给Java程序
1、在idea中配置好数据源
在application.properties中连接自己的数据库:
2、请自己完成添加、删除、修改操作的代码。
首先在pojo包下编写User类:
package com.example.springbootmybatis.Pojo;
public class User {
private Integer id;
private String name;
private short age;
private short gender;
private String phone;
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 short getAge() {
return age;
}
public void setAge(short age) {
this.age = age;
}
public short getGender() {
return gender;
}
public void setGender(short gender) {
this.gender = gender;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
", phone='" + phone + '\'' +
'}';
}
public User(Integer id, String name, short age, short gender, String phone) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.phone = phone;
}
public User() {
}
}
其次在mapper包下编写UserMapper接口,注释与sql语句对应,括号里写sql语句,再写抽象方法:
package com.example.springbootmybatis.mapper;
import org.apache.ibatis.annotations.*;
import com.example.springbootmybatis.Pojo.User;
import java.util.List;
@Mapper//在运行时,会自动生产该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
public interface UserMapper {
//查询所有用户数据方法
@Select("select id, name, age, gender, phone from user")
public List<User> list();
//插入一条数据方法
@Insert("insert into user(id,name, age, gender, phone) values (#{id},#{name}, #{age}, #{gender}, #{phone})")
public void insert(User user);
//根据查找姓名删除一条数据方法
@Delete(" delete from user where name= #{name} ")
public void delete(String name);
//根据id查找信息方法
@Select("select * from user where id= #{id} ")
public User get(int id);
//根据id更新数据方法
@Update("update user set name=#{name} where id=#{id} ")
public int update(User user);
}
在测试类中编写,先声明bean对象userMapper,再用userMapper调用接口中的抽象方法(有传参的记得写参数),编写方法体:
package com.example.springbootmybatis;
import com.example.springbootmybatis.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.example.springbootmybatis.Pojo.User;
import java.util.List;
@SpringBootTest
class SpringbootMybatisApplicationTests {
//依赖注入(接口只能声明不能创建)
@Autowired
private UserMapper userMapper;
@Test
//输出方法
public void listAll(){
List<User> userList = userMapper.list();
userList.stream().forEach(user -> {
System.out.println(user);
});
}
@Test
//增:插入一条新信息
public void insert() {
// 或直接创建赋值一条语句User user =new User(7,"黄九",(short)25,(short)1,"18800000006");
User user = new User();
user.setId(7);
user.setName("黄九");
user.setGender((short)1);
user.setAge((short)25);
user.setPhone("18800000006");
userMapper.insert(user);
listAll();
}
@Test
//删:删除名字为黄九的人
public void delete() {
userMapper.delete("黄九");
listAll();
}
@Test
//改:更新数据信息(更改id为1的人姓名为wsm)
public void update() {
User user= userMapper.get(1);
user.setName("wsm");
userMapper.update(user);
listAll();
}
@Test
//查:查找id为1的人并输出全部信息
public void get() {
User user= userMapper.get(1);
System.out.print(user.getId()+",");
System.out.print(user.getName()+",");
System.out.print(user.getAge()+",");
System.out.print(cusergetGender()+",");
System.out.println(user.getPhone());
}
}
运行之前的表格:
分别运行 增删改查 后的结果:
3、idea的sql 控制台,可以测试sql语句是否正确。所以mapper接口中的sql语句可以先测试。对于有参数的情况,用?代替。
注意:在输入字符类型的值记得打单引号,否则会报错。
4、lombok库的使用。尝试将实体类采用注解的方式来实现。
数据库连接池:
1.数据库连接池是个容器,负责分配,管理数据库连接。
2.它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。(如果没有数据库连接池,数据库执行sql语句首先需要去创建一个新的连接对象,然后再执行sql语句,语句执行完毕后又需要把连接对象关闭来释放资源,每一次都需要开启一个新的连接并关闭,比较浪费资源;如果有了数据库连接池,程序在启动的时候就会在容器当中初始化一定数量的连接对象,客户端在执行sql语句的时候就会从连接池中获取连接对象来执行sql语句,语句执行完后会把连接对象归还给连接池,从而做到连接的复用不必每一次创建新的连接。)
3.释放空闲实践超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。(如果有个别的客户端获取了这个连接但是这个连接一直处于空闲状态,此时数据库连接池就会去监测这个连接的空闲时间,如果发现空闲时间超过了数据库连接池当中预设的最大时间,这个连接将会释放归还给连接池。)
lombok:是一个实用类的Java库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化Java开发、提高效率。
原理:在程序编译的时候根据上面提供的注解决定为这个类提供什么样的方法。
在pom.xml中导入lombok依赖:
在User.java中修改代码:
package com.example.springbootmybatis.Pojo;
import lombok.*;
/*@Getter
@Setter
@ToString
@EqualsAndHashCode*/
@Data//包含以上三个注解
@NoArgsConstructor//无参构造
@AllArgsConstructor//全参构造
public class User {
private Integer id;
private String name;
private short age;
private short gender;
private String phone;
}
再次运行成功:
5、学习idea的调试技巧,并尝试使用。
IDEA断点调试Debug:
1.添加断点
2.启动调试
3.单步执行
4.观察变量和执行流程,并找到解决问题
行断点:断点打在代码所在的行,执行到此行时会停下来。
Step Over表示一行一行执行代码,Step Into表示进入方法中,Force Step Into表示强制进入,Step Out表示跳出,Resume Program表示直接跳到下一断点,Run to Cursor表示跳转到光标所在的位置,Show Excution Point表示跳到断点所在的位置。
6、使用mybatis进行添加、删除、修改、更新的操作。(不需要实现页面,test中控制台能输出结果就行。)
首先在数据库中新建表writer(navicat):
再在Pojo包下编写实体类Writer,利用注释的方式实现:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Writer {
private Integer id;
private String author;
private String gender;
private String dynasty;
private String title;
private String style;
}
再在Mapper包下编写接口WriterMapper,包括增删改查等方法:
package com.example.springbootmybatis.mapper;
import com.example.springbootmybatis.Pojo.Writer;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface WriterMapper {
//添加、删除、修改、更新操作
//添加操作
@Insert("insert into writer(author,gender,dynasty,title,style)values(#{author}, #{gender}, #{dynasty},#{title},#{style})")
public void insert(Writer writer);
//删除操作
@Delete("delete from writer where author = #{author}")
public void delete(String author);
//修改操作
@Update("update writer set gender = #{gender} where author = #{author}")
public void update(Writer writer);
//查找操作
@Select("select * from writer where author= #{author} ")
public Writer select(String author);
//查找所有信息操作
@Select("select * from writer")
public List<Writer> list();
}
编写测试类:
package com.example.springbootmybatis;
import com.example.springbootmybatis.Pojo.Writer;
import com.example.springbootmybatis.mapper.WriterMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class SpringbootMybatisApplicationTests {
//依赖注入(接口只能声明不能创建)
@Autowired
private WriterMapper writerMapper;
@Test//输出所有诗人信息
public void listW(){
List<Writer> writerList = writerMapper.list();
writerList.stream().forEach(writer -> {
System.out.println(writer);
});
}
@Test//插入一条诗人信息
public void insertW(){
Writer writer = new Writer();
writer.setAuthor("wsm");
writer.setGender("女");
writer.setDynasty("现代");
writer.setTitle("111");
writer.setStyle("222");
writerMapper.insert(writer);
listW();
}
@Test//删除名字为wsm的诗人
public void deleteW(){
writerMapper.delete("wsm");
listW();
}
@Test//更改李商隐的性别为男
public void updateW(){
Writer writer = writerMapper.select("李商隐");
writer.setGender("男");
writerMapper.update(writer);
listW();
}
@Test//查找姓名为苏轼的人并输出全部信息
public void select(){
Writer writer = writerMapper.select("苏轼");
System.out.print(writer.getId()+",");
System.out.print(writer.getAuthor()+",");
System.out.print(writer.getGender()+",");
System.out.print(writer.getDynasty()+",");
System.out.println(writer.getTitle()+",");
System.out.println(writer.getStyle());
}
}
输出所有诗人信息:
增加一条诗人信息:
删除一条诗人信息:
修改一条诗人信息:查找一条诗人信息: