Mybatis是一款基于Java的ORM框架,它通过Xml或注解的方式来将Java对象与SQL语句映射起来,把对象持久化到数据库中。在Mybatis中,我们可以通过Mapper代理的方式来调用SQL语句操作数据库。下面是Mybatis通过Mapper代理连接数据库的完整攻略:
步骤一:创建数据库和数据表
首先要创建一个MySQL数据库,然后在数据库中创建一个数据表。假设我们创建的数据库名为“test”,数据表名为“user”,其中包含id、name和age三个字段。
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS user(
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT(11) NOT NULL,
PRIMARY KEY(id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
步骤二:配置Mybatis
我们需要在项目中引入Mybatis相关的依赖,这里以Maven为例:
<dependencies>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-core</artifactId>
<version>3.5.2</version>
</dependency>
<!-- 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
</dependencies>
然后在项目中配置Mybatis的配置文件mybatis-config.xml,包含数据库连接信息、Mapper映射文件配置等。
<?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/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- Mapper映射文件配置 -->
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml" />
</mappers>
</configuration>
步骤三:创建Mapper接口
在Mybatis中,我们可以通过编写Mapper接口对SQL语句进行封装,从而通过Mapper的代理对象来调用SQL语句进行数据库的操作。在本例中,我们创建一个UserMapper接口,使用注解的方式来映射SQL语句。
package com.example.mapper;
import com.example.domain.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper {
// 查询所有用户
@Select("SELECT * FROM user")
List<User> findAll();
// 根据id查询用户
@Select("SELECT * FROM user WHERE id=#{id}")
User findById(@Param("id") Integer id);
// 添加用户
@Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
int insert(User user);
// 更新用户
@Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")
int update(User user);
// 根据id删除用户
@Delete("DELETE FROM user WHERE id=#{id}")
int deleteById(@Param("id") Integer id);
}
上述代码中,@Mapper注解表示该接口是一个Mapper接口,其中的@Select、@Insert、@Update、@Delete注解均表示对应的SQL语句。其中@Param注解用于给SQL语句中的参数取别名。
步骤四:使用Mapper代理操作数据库
在创建完Mapper接口后,我们需要在代码中获取Mapper接口的代理对象,然后就可以使用该代理对象来调用对应的SQL语句进行数据库的操作了。
package com.example;
import com.example.domain.User;
import com.example.mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
import java.util.List;
public class App {
public static void main(String[] args) {
// 获取Mybatis的配置文件输入流
InputStream inputStream = App.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
// 使用SqlSessionFactoryBuilder来创建SqlSession工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 获取UserMapper的代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 查询所有用户
List<User> userList = userMapper.findAll();
System.out.println(userList);
// 根据id查询用户
User user = userMapper.findById(1);
System.out.println(user);
// 添加用户
User newUser = new User();
newUser.setName("Tom");
newUser.setAge(20);
int rows1 = userMapper.insert(newUser);
System.out.println(rows1);
// 更新用户
user.setAge(25);
int rows2 = userMapper.update(user);
System.out.println(rows2);
// 根据id删除用户
int rows3 = userMapper.deleteById(user.getId());
System.out.println(rows3);
// 提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
// 回滚事务
sqlSession.rollback();
} finally {
// 关闭SqlSession
sqlSession.close();
}
}
}
上述代码中,我们首先通过SqlSessionFactoryBuilder来创建SqlSession工厂,然后获取SqlSession对象。接着通过SqlSession的getMapper方法来获取UserMapper的代理对象,然后就可以调用该代理对象的方法来操作数据库了。最后,在程序执行完毕后要记得提交事务和关闭SqlSession。
使用Mybatis通过Mapper代理连接数据库的方法就是以上这些,通过创建Mapper接口和配置映射文件,再通过Mapper的代理对象来调用对应的SQL语句进行数据库的操作。下面是一个更为实际的示例:
举个例子,在很多Web开发中,我们需要使用一些SQL语句来查询或者修改数据库。通过Mybatis,我们可以把这些SQL语句封装到Mapper接口中,从而降低了代码的重构难度,让代码更具有可维护性和可读性。
比如,在一个电商系统中,我们需要查询订单信息。通过Mybatis,我们可以创建一个名为OrderMapper的接口,然后在其中定义对订单信息进行查询的SQL语句。例如,在OrderMapper接口中定义以下几个方法:
public interface OrderMapper {
// 根据用户id查询订单信息
@Select("SELECT * FROM tb_order WHERE user_id=#{userId}")
List<Order> findByUserId(String userId);
// 根据订单id查询订单信息
@Select("SELECT * FROM tb_order WHERE id=#{id}")
Order findById(String id);
// 添加订单
@Insert("INSERT INTO tb_order(id, user_id, amount) VALUES(#{id}, #{userId}, #{amount})")
int insert(Order order);
// 更新订单
@Update("UPDATE tb_order SET user_id=#{userId}, amount=#{amount} WHERE id=#{id}")
int update(Order order);
// 根据订单id删除订单
@Delete("DELETE FROM tb_order WHERE id=#{id}")
int deleteById(String id);
}
在定义好这些Mapper方法后,我们就可以在代码中调用它们了。比如,在Spring MVC的控制器中可以这样使用OrderMapper:
@Autowired
private OrderMapper orderMapper;
@GetMapping("/orders")
public List<Order> findAllOrders(@RequestParam("userId") String userId) {
List<Order> orderList = orderMapper.findByUserId(userId);
return orderList;
}
在上述代码中,我们通过@Autowired注解来注入OrderMapper对象,并在findAllOrders方法中调用OrderMapper的findByUserId方法来查询订单信息。这样,通过Mybatis进行数据库操作的代码就非常简洁、高效、易于维护了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis通过Mapper代理连接数据库的方法 - Python技术站