mybatis框架(2)---mapper代理方法
mapper代理方法
在我们在写MVC设计的时候,都会写dao层和daoimp实现层,但假如我们使用mapper代理的方法,我们就可以不用先daoimp实现类
当然这得需要遵守一些相应的规则:
(1)Usermapper.java接口必须和Usermapper.xml名称相同,且要在同一目录下:

(2)mapper.xml中namespace等于mapper接口的地址

(3)Usermapper.java接口中国的方法名和Usermapper.xml中statement的id一致
<!-- 7综合查询 -->
<select id="findUserCount" parameterType="com.study.model.User" resultType="int">
select count(*) from user where user.sex=#{userCustomer.sex} and user.username like '%${userCustomer.username}%'
</select>
如果你在Usermapper.xml配置上面这些属性那么你所写的接口就必须:
/*findUserCount接口的名字必须和id属性一致
* 传入的参数必须和parameterType是一致,前面是user这里也是user
* 返回类型resultType是int类型,那么这里也必须是int类型
*/
public int findUserCount(User user);
(4)SqlMapConfig.xml中加载mapper.xml
<mappers>
<!-- 这里是之前加载所写的 -->
<!-- <mapper resource="sqlmap/User.xml" /> -->
<!-- 通过mapper接口 加载单个映射文件 必须遵循一些规范: 需要将mapper接口和mapper.xml映射文件 文件名必须一致 并且在同一个目录下 -->
<mapper class="com.study.mapper.UserMapper" /> </mappers>
(5)通过mapper代理方法进行增删改查
a.编写user对象
public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
/*
*提供set和get方法和tostring方法
*
*/
}
b.配置SqlMapConfig.xml
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<!-- 定义 别名 -->
<typeAliases>
<!--
单个别名的定义
alias:别名,type:别名映射的类型 -->
<!-- <typeAlias type="com.study.model.User" alias="user"/> -->
<!-- 批量别名定义
指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写)
-->
<package name="com.study.model"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载mapper映射
如果将和spring整合后,可以使用整合包中提供的mapper扫描器,此处的mappers不用配置了。
-->
<mappers>
<mapper class="com.study.mapper.UserMapper" />
</mappers> </configuration>
在这里有两个新的知识点:
1: <properties resource="db.properties"></properties>
之前在连接数据库填写配置文件直接把属性(连接数据库用户名,密码等)写在里面,而这里是写在外面的db.properties中,这样更好的体现代码的灵活性
2:<typeAliases>标签,之前我们配置mapper.xml文件中的parameterType和resultType的属性如果是对象一定要写类的全名称,而通过<typeAliases>标签的配置我们只需要写类的名字就好了
c.配置db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/study
jdbc.username=root
jdbc.password=root
也就是这样的

d.配置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的属性对应所在的UserMapper接口全名称 -->
<mapper namespace="com.study.mapper.UserMapper">
<!-- 发现这里的resultType属性我们可以不用写类的全名称com.study.model.User,因为在-->
<!--SqlMapConfig.xml属性中我们配置了<typeAliases>标签 -->
<!-- 根据id查询用户信息 -->
<select id="findUserById" parameterType="int" resultType="user">
SELECT * FROM USER WHERE id= #{id}
</select> <!-- 根据用户名称查询用户信息,可能返回多条-->
<select id="findUserByName" parameterType="java.lang.String" resultType="user">
select * from user where username like '%${value}%'
</select> <!-- 添加用户-->
<insert id="insertUser" parameterType="user">
INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})
</insert> </mapper>
f.配置UserMapper.java对象
public interface UserMapper {
//根据用户id查询用户信息
public User findUserById(int id) throws Exception;
//根据用户名称 查询用户信息
public List<User> findUserByName(String username) throws Exception;//插入用户
public void insertUser(User user)throws Exception;
//删除用户
public void deleteUser(int id) throws Exception;
//修改用户
public void updateUser(User user) throws Exception;
}
e.编写UserMapperTest类进行 增删改查
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import com.study.mapper.UserMapper;
import com.study.model.User; public class UserMapperTest {
// 会话工厂
private SqlSessionFactory sqlSessionFactory;
// 创建工厂
@Before
public void init() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
//通过用户id查找对象
@Test
public void testFindUserById() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建代理对象,这里就相当于有事先类了
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserById(1);
System.out.println(user);
} //根据用户相信模糊查询
@Test
public void testFindUserByUsername() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> list = userMapper.findUserByName("小明");
System.out.println(list);
} //添加用户
@Test
public void testInsertUser() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("小小洪");
//我这里只添加了用户名,其它信息没有添加,默认为null
//Preparing: INSERT INTO USER(username,birthday,sex,address) VALUES(?,?,?,?)
//Parameters: 小小洪(String), null, null, null
userMapper.insertUser(user);
sqlSession.commit();
sqlSession.close();
}
}
/*
*删除和修改我这里先不写了,大家理解就好
*/
本文就讲到这,谢谢大家,欢迎大家指点谢谢!
mybatis框架(2)---mapper代理方法的更多相关文章
- mybatis系列笔记(2)---mapper代理方法
mapper代理方法 在我们在写MVC设计的时候,都会写dao层和daoimp实现层,但假如我们使用mapper代理的方法,我们就可以不用先daoimp实现类 当然这得需要遵守一些相应的规则: (1) ...
- 【MyBatis学习04】mapper代理方法开发dao
上一篇博文总结了mybatis使用 原始dao的方法存在的一些弊端,我们肯定不会去用它,那么mybatis中该如何开发dao呢?如题所述,这篇博文主要来总结一下使用mapper代理的方法来开发dao的 ...
- mybatis框架之动态代理
坦白讲,动态代理在日常工作中真没怎么用过,也少见别人用过,网上见过不少示例,但总觉与装饰模式差别不大,都是对功能的增强,什么前置后置,其实也就那么回事,至于面试中经常被问的mybatis框架mappe ...
- idea插件(mybatis框架下mapper接口快速跳转对应xml文件)亲测好用!
我相信目前在绝大部分公司里,主要使用的框架是S(spring)S(spring MVC)M(mybatis),其中mybatis总体架构是编写mapper接口,框架扫描其对应的mapper.xml文件 ...
- Mybatis中配置Mapper的方法
在这篇文章中我主要想讲一下Mybatis配置文件中mappers元素的配置.关于基础部分的内容可以参考http://haohaoxuexi.iteye.com/blog/1333271. 我们知道在M ...
- Mybatis框架中Mapper文件传值参数获取。【Mybatis】
1.参数个数为1个(string或者int) dao层方法为以下两种: /** * 单个int型 */ public List<UserComment> findByDepartmentI ...
- 阶段3 3.SpringMVC·_07.SSM整合案例_07.ssm整合之编写MyBatis框架测试保存的方法
再写一个测试的方法,测试save保存的方法 需要提交事务才能保存到数据库
- mybatis框架中 动态代理的问题
在配置文件时候 id唯一性 所以不允许重载 <select id=" querydemo" resultType="pojo"> sql 语句 ...
- Mybatis的mapper代理开发dao方法
看完了之前的mybatis原始的dao开发方法是不是觉得有点笨重,甚至说没有发挥mybatis 作为一个框架的优势.总结了一下,原始的dao方法有以下几点不足之处 dao接口实现方法中存在大量的模板方 ...
随机推荐
- Atom使用
cmd-r 通过方法名查找 ctrl-option-g 跳转至光标所在方法或结构 安装 last-cursor-position 后 alt-- 返回至光标上一次所在位置
- RequestMethod.Post&RequestMethod.GET
1.GET和POST都是将数据送到服务器 2.GET通过URL请求传递用户的数据,将表单各字段名称以及内容,以成对的字符串连接,置于action所指程序的URL后:POST方法通过HTTP post ...
- 大前端学习笔记【七】关于CSS再次整理
如果你在日常工作中使用 CSS,你的主要目标可能会重点围绕着使事情“看起来正确”.如何实现这一点经常是远不如最终结果那么重要.这意味着比起正确的语法和视觉结果来说,我们更少关心 CSS 的工作原理. ...
- 使用mobx项目开发总结(不再更新)
mobx的优点 1,使用@observer的组件真正实现按需更新,只有监听的数据发生变化,它才会re-render,尽管父组件发生更新,但是子组件只要有@observer,则不会触发更新,类似于实 ...
- ubuntu 安装vue+element
1.安装npm sudo apt install npm 检测安装npm -v 因为npm安装软件慢,可设置淘宝镜像 npm config set registry https://registry. ...
- 将Paul替换成Ringo
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- GXB动态重配置
可选择重配置逻辑(Optional Reconfiguration Logic) 使能选项: • Capability registers • Control and status registers ...
- 日程管理Demo4中的bug
Demo4的github地址 模拟器有点慢之后贴图 https://git.oschina.net/annie_guo/study.git 在登陆注册界面中java的提示语言(Login.java) ...
- android:动态申请权限(一)
环境: android版本6.0 对应SDK版本23 动态申请权限说明:所有动态申请的权限,必须在AndroidManifest.xml中进行声明 步骤 1.新建一个android工程 默认创建即可 ...
- poj 1026
这题一开始没看清楚 等级差距不超过1 1->2->3 就是错误的,因为3-1==2 ,意思是间接的也不行 其次等级最小是1,最大是n 你要到达1号首领的位置 假设1号等级x,限制m,最大上 ...