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);}}


测试结果:


0 0
原创粉丝点击