Mybatis1.1——使用mapper代理开发dao

本文介绍如何使用MyBatis的Mapper代理方式优化DAO层代码,通过编写XML映射文件和接口实现数据库操作,提升代码效率和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Javaweb框架学习文章索引点这里
由于在dao接口实现类方法中调用操作数据库的方法中存在大量冗余代码,并且在调用方法的时候传入了部分硬编码参数等问题。引入mapper代理的方式可以解决这些问题,并提高效率。
下面是一个简单的mapper代理开发的示例:
1,编写javabean,以及对应的数据库表。User(id, name, age,tel)
2,编写UserMapper.xml。大致内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--这里namespace填的是javabean的全限定类名-->
<mapper namespace="com.hhh.mapper.UserMapper">
		<select id="findUserById" parameterType="int" resultType="com.hhh.dao.User">
			select * from user where id = #{id}
		</select>
		
		<select id="findUserByName" parameterType="java.lang.String" resultType="com.hhh.dao.User">
			select * from user where name like '%${value}%'
		</select>
		
		<insert id="insertInfoToUser" parameterType="com.hhh.dao.User">
			insert into user(name, age, tel) values(#{name},#{age},#{tel})
			<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
				select last_insert_id();
			</selectKey>
		</insert>
		
		<delete id="deleteById" parameterType="java.lang.Integer">
			delete from user where id = #{id}
		</delete>
		
		<update id="updateUser" parameterType="com.hhh.dao.User">
			update user set name = #{name} where id = #{id}
		</update>
</mapper>

以上配置的sql语句主要是常见的增删改查
3,在SqlMapConfig.xml中配置数据库参数和加载映射文件

<?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">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC"/>
			<!-- 配置数据库连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.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>

4,编写UserMapper接口

package com.hhh.mapper;


import java.util.List;

import com.hhh.dao.User;

public interface UserMapper {
	/*
	 * 这里的方法名需要和xml中配置的名称相对应
	 * 输入参数类型和返回值类型也是要和xml中配置的相同
	 * */
	public User findUserById(int id) throws Exception;
	
	/*
	 * 虽然在xml中配置的返回值类型为User,但是由于返回值为多项内容,所以这里需要设置为List
	 * */
	public List<User> findUserByName(String name) throws Exception;
	
	public void deleteUserById(int id) throws Exception;
	
	public void updateUser(User user) throws Exception;
	
	public void insertInfoToUser(User user) throws Exception;
}

5,编写测试:

@Test
	public void test2() throws Exception{
		//1,获取sqlsession
		InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//获取由mybatis生成的mapper实现类
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
		
		//测试单项查询
/*		User user= mapper.findUserById(1);
		System.out.println(user);*/
		
		//测试多项查询
/*		List<User> list = mapper.findUserByName("张三");
		System.out.println(list);*/
		
		//测试插入
/*		User user = new User("张三3",23,"12344");
		mapper.insertInfoToUser(user);
		sqlSession.commit();*/
		
		//测试更新
/*		User user = new User("张三5",23,"12344");
		user.setId(23);//设置更新id为23的数据内容
		mapper.updateUser(user);
		sqlSession.commit();*/
		
		//测试删除
		mapper.deleteUserById(23);
		sqlSession.commit();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值