下面是我为您准备的Java Mybatis框架增删查改与核心配置详解攻略。
1. 简介
Mybatis是一个基于Java的持久化框架,在数据访问层(DAO层)上提供了映射关系,可以通过XML文件或者注解的方式方便地进行增删查改操作。
2. 核心配置
Mybatis的核心配置主要包括配置文件、映射文件、SqlSessionFactory、SqlSession和Executor五个部分。
2.1 配置文件
Mybatis的配置文件可以通过XML文件的方式进行定义,包括数据库连接池、插件、类型别名、对象工厂、对象包装器、缓存等多种配置项。
<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/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
2.2 映射文件
Mybatis的映射文件用于定义SQL语句和Java对象之间的映射关系,可以通过SQL语句和标准的Java对象进行数据的增删查改操作。
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.entity.User">
select * from user where id=#{id}
</select>
<insert id="addUser" parameterType="com.example.entity.User">
insert into user(name, age, sex) values(#{name}, #{age}, #{sex})
</insert>
<update id="updateUser" parameterType="com.example.entity.User">
update user set name=#{name}, age=#{age}, sex=#{sex} where id=#{id}
</update>
<delete id="deleteUser" parameterType="java.lang.Long">
delete from user where id=#{id}
</delete>
</mapper>
2.3 SqlSessionFactory
SqlSessionFactory是Mybatis的核心,用于创建SqlSession对象的工厂,需要加载Mybatis的配置文件。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2.4 SqlSession
SqlSession是Mybatis的核心,用于提交或者回滚事务、执行SQL语句和获取Mapper对象等操作,提供了多种对数据库进行操作的方法。
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1L);
sqlSession.commit();
sqlSession.close();
2.5 Executor
Executor是Mybatis的核心,用于执行SQL语句并返回结果,可以根据配置进行不同的操作。
3. 增删查改操作
Mybatis支持通过XML文件和注解两种方式进行增删查改操作,下面分别介绍这两种方式的具体实现。
3.1 XML方式
//添加用户
User user = new User("Tom", 18, "male");
userMapper.addUser(user);
Long id = user.getId();
//查询用户
User user = userMapper.getUserById(id);
//修改用户
user.setName("Jerry");
userMapper.updateUser(user);
//删除用户
userMapper.deleteUser(id);
3.2 注解方式
//添加用户
User user = new User("Tom", 18, "male");
userMapper.addUser(user);
Long id = user.getId();
//查询用户
User user = userMapper.getUserById(id);
//修改用户
user.setName("Jerry");
userMapper.updateUser(user);
//删除用户
userMapper.deleteUser(id);
示例
示例1
假设有一个用户表user,包括id、name、age和sex四个字段,现在需要使用Mybatis进行增删查改操作,具体步骤如下。
- 编写配置文件mybatis-config.xml,指定数据库连接等相关配置。
<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/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 编写映射文件UserMapper.xml,定义SQL语句和Java对象之间的映射关系。
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.entity.User">
select * from user where id=#{id}
</select>
<insert id="addUser" parameterType="com.example.entity.User">
insert into user(name, age, sex) values(#{name}, #{age}, #{sex})
</insert>
<update id="updateUser" parameterType="com.example.entity.User">
update user set name=#{name}, age=#{age}, sex=#{sex} where id=#{id}
</update>
<delete id="deleteUser" parameterType="java.lang.Long">
delete from user where id=#{id}
</delete>
</mapper>
- 编写实体类User,定义Java对象的属性。
public class User {
private Long id;
private String name;
private Integer age;
private String sex;
//getters and setters
}
- 编写UserMapper接口,定义一个根据id查询用户数据的方法getUserById。
public interface UserMapper {
User getUserById(Long id);
}
- 在测试类中使用SqlSession对象进行增删查改操作,先生成SqlSessionFactory对象,然后通过SqlSessionFactory对象获取SqlSession,并获得Mapper对象进行操作。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//添加用户
User user = new User("Tom", 18, "male");
userMapper.addUser(user);
Long id = user.getId();
//查询用户
User user = userMapper.getUserById(id);
//修改用户
user.setName("Jerry");
userMapper.updateUser(user);
//删除用户
userMapper.deleteUser(id);
sqlSession.commit();
sqlSession.close();
- 运行并查看运行结果。
示例2
假设有一个订单表order,包括id、user_id、amount和created_at四个字段,user_id是外键关联到用户表中的id字段,现在需要使用Mybatis进行增删查改操作,具体步骤如下。
- 编写配置文件mybatis-config.xml,指定数据库连接等相关配置。
<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/test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/OrderMapper.xml"/>
</mappers>
</configuration>
- 编写映射文件OrderMapper.xml,定义SQL语句和Java对象之间的映射关系。
<mapper namespace="com.example.mapper.OrderMapper">
<select id="getOrderByUserId" resultMap="orderResultMap">
select id, user_id, amount, created_at from `order` where user_id=#{userId}
</select>
<resultMap id="orderResultMap" type="com.example.entity.Order">
<result column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="amount" property="amount"/>
<result column="created_at" property="createdAt"/>
<association property="user" select="com.example.mapper.UserMapper.getUserById" column="user_id"/>
</resultMap>
</mapper>
- 编写实体类Order,定义Java对象的属性。
public class Order {
private Long id;
private Long userId;
private BigDecimal amount;
private Date createdAt;
private User user;
//getters and setters
}
- 编写OrderMapper接口,定义一个根据用户id查询订单数据的方法getOrderByUserId。
public interface OrderMapper {
List<Order> getOrderByUserId(Long userId);
}
- 在测试类中使用SqlSession对象进行增删查改操作,先生成SqlSessionFactory对象,然后通过SqlSessionFactory对象获取SqlSession,并获得Mapper对象进行操作。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
//查询订单
List<Order> orderList = orderMapper.getOrderByUserId(1L);
for (Order order : orderList) {
System.out.println(order.getId() + ", " + order.getAmount() + ", " +order.getCreatedAt() + ", " + order.getUser().getName());
}
sqlSession.close();
- 运行并查看运行结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Mybatis框架增删查改与核心配置详解流程与用法 - Python技术站