JavaEE_Mybatis_SpringMVC_整合开发_lesson2_Mapper代理开发方式
来源:互联网 发布:分岔分析软件 编辑:程序博客网 时间:2024/05/17 02:15
百度云:Myeclipse2014项目(包括数据库表和数据)
http://pan.baidu.com/s/1i4ij4Kt
上接lessson1,SSM框架整合, 原始Dao开发
本例展示如何使用Mapper代理的开发方式,开发SSM(Spring Springmvc Mybaits)
主要内容包括
1.SqlMapConfig.xml (Mybatis配置文件)
2.application-Context.xml (SpringMVC配置文件)
3.User.java(JavaBean)
4.UserMapper.java(接口类) / UserMapper.xml(接口实现)
5.Mapper测试类 UserMapperTest.java 利用Junit 进行测试
项目的目录结构
1.SqlMapConfig.xml (Mybatis配置文件)
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- <settings></settings> --><typeAliases><!--单个起别名的方法--><!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> --><!-- 批量定义别名 --><package name="cn.itcast.ssm.po"/></typeAliases><mappers><!-- 原始Dao开发方式,提供xml文件 --><mapper resource="sqlmap/User.xml" /><!-- <mapper resource="mapper/UserMapper.xml"/> --><!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --><!-- Mybatis的包扫描器: 由Spring管理后, 在Spring中进行配置 --><!--<package name="cn.itcast.ssm.mapper" /> --></mappers></configuration>
2.application-Context.xml (Spring配置文件)
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd "><!-- 加载配置文件 --><context:property-placeholder location="classpath:db.properties" /><!-- 数据源,使用dbcp --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="maxActive" value="10" /><property name="maxIdle" value="5" /></bean><!-- sqlSessinFactory --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 加载mybatis的配置文件 --><property name="configLocation" value="mybatis/SqlMapConfig.xml" /><!-- 数据源 --><property name="dataSource" ref="dataSource" /></bean><!-- 原始dao接口 --><bean id="userDao" class="cn.itcast.ssm.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean><!-- Mapper代理的开发方式 --><!-- --><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><!--mapperInterface 指定mapper接口 --><property name="mapperInterface" value="cn.itcast.ssm.mapper.UserMapper"/><property name="sqlSessionFactory" ref="sqlSessionFactory"/></bean><!-- Spring的包扫描器 --><!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><property name="basePackage" value="cn.itcast.ssm.mapper"/></bean> --></beans>注意事项:
<!-- Spring的包扫描器 --> org.mybatis.spring.mapper.MapperScannerConfigurer
<!-- mapper批量扫描,从mapper保重扫描出mapper接口,自动创建代理对象在Spring中注册 -->
<!-- 这里必须使用sqlSessionFactoryBeanName,若用sqlSessionFactory -->
<!-- 会 在context:property-placeholder组件之前加载,导致db.properties读取失败 -->
3.User.java(JavaBean)
package cn.itcast.ssm.po;import java.util.Date;import java.util.List;//hibernate字段名和属性名相对应public class User {@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", birthday="+ birthday + ", sex=" + sex + ", address=" + address + "]";}private int id;private String username;private Date birthday;private String sex;private String address;// 用户的订单商品信息List<Orders> orderlist;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}// 用户的订单商品信息public List<Orders> getOrderlist() {return orderlist;}public void setOrderlist(List<Orders> orderlist) {this.orderlist = orderlist;}}
4.UserMapper.java(接口类) / UserMapper.xml(接口实现)
UserMapper.java(接口类
package cn.itcast.ssm.mapper;import java.util.List;import cn.itcast.ssm.po.User;import cn.itcast.ssm.po.UserCustom;import cn.itcast.ssm.po.UserQueryVo;public interface UserMapper {User findUserById(Integer id) throws Exception;List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;Integer findUserCount(UserQueryVo userQueryVo) throws Exception;User findUserByIdResultMap(Integer id) throws Exception;public List<User> findUserByName(String name) throws Exception;void insertUser(User user) throws Exception;void deleteUser(int id) throws Exception;}
UserMapper.xml(接口实现)
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 注意:使用mapper代理方法开发,namespace有特殊重要的作用--><mapper namespace="cn.itcast.ssm.mapper.UserMapper"><resultMap type="User" id="userResultMap"><id column="_id" property="id"/><result column="_username" property="username"/></resultMap><sql id="query_user_where"><if test="userCustom!=null"><if test="userCustom.sex!=null and userCustom.sex!=''">AND user.sex = #{userCustom.sex}</if><if test="userCustom.username!=null and userCustom.username!=''">AND user.username like'%${userCustom.username}%'</if></if></sql><!-- 通过OGNL的方式进行获取 --><select id="findUserList" parameterType="cn.itcast.ssm.po.UserQueryVo"resultType="cn.itcast.ssm.po.UserCustom">SELECT * FROM user<!-- where 可以自动去掉第一个and --><where><include refid="query_user_where"></include><if test="ids!=null"><!-- 使用foreach遍历传入的ids collection:指定输入对象中的集合属性 item:每个便利的对象 open:开始遍历拼接的串 close:结束遍历拼接的串 separator:遍历的两个对象中需要拼接的串 --><foreach collection="ids" item="id" open="AND user.id IN (" close=")" separator=",">#{id}</foreach></if></where></select><select id="findUserCount" parameterType="cn.itcast.ssm.po.UserQueryVo"resultType="int">SELECT COUNT(*) FROM user WHERE user.sex = #{userCustom.sex} ANDuser.username like'%${userCustom.username}%'<!-- where 可以自动去掉第一个and --><where><include refid="query_user_where"></include></where></select><select id="findUserByIdResultMap" parameterType="java.lang.Integer" resultMap="userResultMap"> SELECT id _id, username _username FROM user where id = #{id} </select> <!-- cn.itcast.mybatis.po.User --> <select id="findUserById" parameterType="java.lang.Integer" resultType="user"> SELECT * FROM user where id = #{id} </select> <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.ssm.po.User"> SELECT * FROM user where username like '%${value}%' </select> <insert id="insertUser" parameterType="cn.itcast.ssm.po.User"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address}) <!-- 使用mysql的uuid()生成主键执行过程:首先通过uuid()得到主键,将主键设置到user对象的id属性中其次在insert执行时,从user对象中取出id属性值 --><!-- <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">SELECT uuid()</selectKey>insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address}) --> </insert><delete id="deleteUser" parameterType="java.lang.Integer">DELETE FROM user WHERE id=#{id}</delete> <update id="updateUser"parameterType="cn.itcast.ssm.po.User">UPDATE user SET username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}</update> </mapper>
5.Mapper测试类 UserMapperTest.java 利用Junit 进行测试
package cn.itcast.ssm.mapper;import java.util.List;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.itcast.ssm.po.User;public class UserMapperTest {private ApplicationContext applicationContext;// 此方法是在执行testFindUserById之前执行@Beforepublic void setUp() throws Exception {applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");}@Testpublic void testFindUserById() throws Exception {UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");// applicationContext.getAliases(arg0)User user = userMapper.findUserById(1);System.out.println(user);}@Testpublic void testFindUserByName() throws Exception {UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");List<User> userList = userMapper.findUserByName("小");System.out.println(userList);}@Testpublic void testInsertUser() throws Exception {UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");User user = new User();user.setUsername("haha");userMapper.insertUser(user);}@Testpublic void testDeleteUser() throws Exception {UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");userMapper.deleteUser(40);}}
测试结果:
- JavaEE_Mybatis_SpringMVC_整合开发_lesson2_Mapper代理开发方式
- JavaEE_Mybatis_SpringMVC_整合开发_Controller的返回值
- JavaEE_Mybatis_SpringMVC_整合开发_工作纪要
- JavaEE_Mybatis_SpringMVC_整合开发奇葩问题1:dataSource报错?
- JavaEE_Mybatis_SpringMVC_框架整合_lesson1_简单的SSM框架搭建_使用原始Dao开发方式进行测试
- JavaEE_Mybatis_SpringMVC_框架整合_lesson3_框架整合+测试用例,数据库到前台的开发流程
- JavaEE_Mybatis_SpringMVC_整合开发_数据绑定_int/Integer等 基础类型自动拆装包中的小问题
- mybatis开发Mapper代理方式
- (五)mybatis学习之mapper代理开发方式及与spring整合
- mybatis3整合spring4-采用mapper动态代理的方式开发Dao
- Mybatis-Spring整合Mapper代理开发
- Spring和Mybatis整合(mapper代理开发)
- Spring + Mybatis - 原始dao开发整合 与 Mapper代理整合
- Android开发请求网络方式整合
- JavaEE_Mybatis_SpringMVC_Mybatis_lesson3_ Mapper代理的开发方式
- mybatis入门--mapper代理方式开发
- Mybatis Mapper代理的开发方式
- MyBatis中Mapper代理开发方式
- HTML笔记(列表&表格)
- 【练习手记】【多题合集】用树状数组做线段树练习1、2、3
- poj--1637--Sightseeing tour(网络流,最大流判断混合图是否存在欧拉图)
- ZJU 1453 Surround the Trees 凸包
- project euler 46
- JavaEE_Mybatis_SpringMVC_整合开发_lesson2_Mapper代理开发方式
- leetcode Word Pattern
- OC控件间的继承关系,用UI实现
- 计蒜课—和为M的组合个数
- Android开发项目(一)登录
- HTML笔记(框架)
- matlab图像滤波
- android的MVP模式以及接口的理解
- HTML笔记(表单和输入)