Mapper的动态代理开发方式:
Mapper的动态代理开发 程序员只用关心 Mapper接口(Dao接口),mybatis会根据接口定义 创建 接口的代理对象(代理对象在这里就是之前的dao、层实现类)
Mapper的动态代理开发方式的规范:
- Mapper.xml文件中namespace 必须和mapper对应的接口 全路径保持一致
- mapper接口中 方法名必须和Mapper.xml文件中的 sql id 相同
- mapper接口中 方法的输入参数类型必须和Mapper.xml文件中的 输入映射类型一致
- mapper接口中 方法的返回值类型 必须和Mapper.xml文件中的输出映射类型一致
提供一个简单的业务需求:
- 查询一个用户( 根据用户id)
- 模糊查询用户列表(根据用户名)
- 查询全部用户信息
- 添加用户
- 修改用户
- 删除用户(根据用户id)
提醒:注释都在java块代码中(注意区分注释和代码) 暂时没有spring
首先在lib包中加入各种jar包(前面mabatis入门文档中有)
com.bean创建一个User对象
com.mapper配置UserMapper.java文件
package com.mapper;
import java.util.List;
import com.bean.User;
public interface UserMapper {
/**
* 根据用户id查询用户
*
* @param id
* @return User
* */
User queryUserById(int id);
/**
* 根据用户 关键字 模糊查询用户信息
*
* @param id
* @return User
* */
List<User> queryUserByName(String username);
// 查询全部用户
List<User> queryUserAll();
// 添加用户
void addUser(User user);
// 修改用户
void updateUserById(User user);
// 根据用户id删除用户
void deleteUserById(int id);
}
com.mapper配置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:命名空间,用于隔离sql,还有一个很重要的作用: 使用动态代理时,namespace的值必须和mapper的接口全路径保持一致 -->
<mapper namespace="com.mapper.UserMapper">
<!--
id:当前sql语句的唯一标识
parameterType:输入参数的类型,mybatis从输入的对象中 读取参数 进行sql语句的封装
resultType:返回值的类型(自动映射的前提 (数据库字段必须和pojo类的属性完全一致))
#{
} 输入参数的占位符 ==jdbc中的? 通过PreparedStatement可以防止sql注入 ; 可以接受的参数有:简单数据类型 或者pojo(对象类型) 强调:自动将java类型转化成jdbc类型
${
} 表示字符串的拼接,通过statement进行拼接(存在sql注入问题);可以接受的参数有:简单数据类型${
value}必须是value 或者pojo(对象类型) 强调:不会将java类型转化成jdbc类型
-->
<!--根据id查询 -->
<select id="queryUserById" parameterType="int" resultType="User">
select * from user where id=#{
id}
</select>
<!--模糊查询 -->
<select id="queryUserByName" parameterType="String" resultType="user">
select *from user where username like "%"#{
username}"%"
</select>
<!--模糊查询的另外几种方式 -->
<!-- <select id="queryUserByName1" parameterType="String" resultType="user">
select *from user where username like '%${value}%'
</select>
<select id="queryUserByName2" parameterType="String" resultType="user">
select *from user where username like #{
username}
</select>
<select id="queryUserByName3" parameterType="String" resultType="user">
select *from user where instr(username,#{
username})>0
</select> --