使用mybatis -基本的增删改查
目录
项目准备
项目步骤
具体细节
1 主配置文件的处理
2 Test 测试类
3 在 loginMapper 接口中书写 对 数据库操作的方法
4 实体类 pojo 、entity 要和 数据库对应的表的字段 一一对应
5 在 loginMapper.xml 映射文件 书写 具体实现 loginMapper 接口中方法的sql 语句(重点)
查询用户登录信息(select)
单个查询
多个查询(集合存储)
插入 李四登录信息
修改李四 密码
删除 李四的登录信息
项目准备
1 清楚 mybatis是 持久层框架,主要用来 操作数据库,对数据库的存储的数据 进行增删改查 的操作
2 准备 mybatis 框架需要的基本依赖
- mysql-connector-java 数据库连接 依赖 和 mybatis 使用mybatis 框架所必须的依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
</dependencies>
3 添加 项目需要的表 (tb_login)
项目步骤
1 使用maven 构建的项目
2 在 pom文件添加需要的依赖
3 添加 表信息
4 在主配置文件中,连接数据库,以及加载 映射文件需要的路径
5 在 mapper/dao层 接口 写 关于操作 数据库的方法
6 在 映射文件写具体关于如何操作数据库的sql 语句(重点)
7 测试类,测试结果,进行效果展示
具体细节
1 主配置文件的处理
加载配置文件 db.properties
- 关于与数据库连接的信息其中包括 数据库驱动,用户名,密码,url路径
<properties resource="db.properties"></properties>
配置连接环境
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<!-- 配置数据源信息-->
<property name="driver" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</dataSource>
</environment>
</environments>
加载映射文件 loginMapper.xml
<mappers>
<mapper resource="mapper/loginMapper.xml"></mapper>
</mappers>
注意:这里的一切都是在主配置文件 <configuration>........</configuration>标签包围
2 Test 测试类
//获取mybatisConfig.xml 配置文件
InputStream resource = Resources.getResourceAsStream("mybatisConfig.xml");
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);
// 获取sqlsession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
3 在 loginMapper 接口中书写 对 数据库操作的方法
package fs.mapper;
import fs.entity.Login;
import java.util.List;
//操作数据库 的方法
public interface loginMapper {
// 查询 所有用户的登录信息
List<Login> getAllLogin();
// 根据用户id 查询登录信息
Login getLoginById(Integer id);
// 插入 李四的登录信息
int insertLogin(Login login);
// 修改李四的登录 的密码
int updateLogin(Login login);
// 根据用户id 删除登录信息
int deleteLoginById(Login login);
}
4 实体类 pojo 、entity 要和 数据库对应的表的字段 一一对应
package fs.entity;
public class Login {
private Integer id;
private String password;
private String username;
public Login() {
}
public Login(String username, String password) {
this.username = username;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String toString() {
return "Login{" +
"id=" + id +
", password='" + password + '\'' +
", username='" + username + '\'' +
'}';
}
}
5 在 loginMapper.xml 映射文件 书写 具体实现 loginMapper 接口中方法的sql 语句(重点)
前提: 以下这一切都是在 mapper 标签 内执行的,并且 一定要标注好 namespace
namespace 的值是 dao/mapper 持久层的接口 的具体位置 如
namespace="fs.mapper.loginMapper"
查询用户登录信息(select)
注意
1 parameterType 表示 传递参数 类型
2 resultType
- 输出简单类型
- 不管是输出的单个对象还是一个列表(list中包括对象),在mapper.xml中resultType指定的类型是一样的。都是对象类型
注意:
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。
单个查询
<select id="getLoginById" parameterType="int" resultType="fs.entity.Login">
select * from tb_login where id=#{id};
</select>
Test 测试类 关于单个查询 的代码
Login login = sqlSession.selectOne("getLoginById", 1);
System.out.println(login);
效果展示
多个查询(集合存储)
<select id="getAllLogin" resultType="fs.entity.Login">
select * from tb_login;
</select>
Test 测试类 关于多个查询(集合存储) 的代码
List<Login> list = sqlSession.selectList("getAllLogin");
for (Login login : list) {
System.out.println("id: "+login.getId()+"用户名: "+login.getUsername()+"密码: "+login.getPassword());
}
效果展示
插入 李四登录信息
在 tb_login 表中 插入 李四登录信息
insert into tb_login(username, password) values ('admin','123456');
loginMapper.xml 映射文件
<insert id="insertLogin" parameterType="fs.entity.Login" >
insert into tb_login(username,password) values(#{username},#{password});
</insert>
Test 测试类 关于插入 李四登录信息 的代码
int insert = sqlSession.insert("insertLogin", new Login("admin", "123456"));
sqlSession.commit();
if (insert > 0){
System.out.println("添加成功");
}
效果展示
修改李四 密码
update tb_login set password='123';
loginMapper.xml 映射文件
<update id="updateLogin" parameterType="fs.entity.Login" >
update tb_login set password=#{password} where username=#{username},;
</update>
Test 测试类 关于修改李四 密码 的代码
int update = sqlSession.update("updateLogin", new Login("admin", "123"));
// 提交事务
sqlSession.commit();
if (update > 0){
System.out.println("修改成功");
}
效果展示
删除 李四的登录信息
delete from tb_login where username='李四' and password='123';
loginMapper.xml 映射文件
<delete id="deleteLoginById" parameterType="fs.entity.Login" >
delete from tb_login where username=#{username}and password=#{password};
</delete>
Test 测试类 关于删除 李四的登录信息的代码
int delete = sqlSession.delete("deleteLoginById", new Login("admin", "123"));
sqlSession.commit();
if (delete > 0){
System.out.println("删除成功");
}
效果展示