黑马程序员技术交流社区

标题: MyBatis3.1.1+Spring3.1.1的增、删、查、改以及分页和事务管理 [打印本页]

作者: @♂№‰腊布啊に    时间: 2013-1-14 15:12
标题: MyBatis3.1.1+Spring3.1.1的增、删、查、改以及分页和事务管理
实体beanpublic class User {        Integer age; //年龄         Integer gender;  //性别                Integer id;        String mail; //邮箱        String nickname;        String password;        String site; //个人站点        String username;        public User() {                super();                // TODO Auto-generated constructor stub        }//忽略无参构造和get,set代码}实体类的UserDaopublic interface UserDao {                void save(User user);                List<User> findAll();                        User findById(Integer id);                        void delete(Integer id);                        void update(User user);                        List<User> findByPage(UserPage page);                        Integer getCount(UserPage page);}实体类UserDao的实现UserDaoImpl-----public class UserDaoImpl implements UserDao{            //在此处注入一个UserMapper        private UserMapper userMapper;        public void setUserMapper(UserMapper userMapper) {                this.userMapper = userMapper;        }        @Override        public void delete(Integer id) {                userMapper.delete(id);        }        @Override        public List<User> findAll() {                return userMapper.findAll();        }        @Override        public User findById(Integer id) {                return userMapper.findById(id);        }        @Override        public void save(User user) {                userMapper.save(user);//                throw new RuntimeException("Error");                        }        @Override        public void update(User user) {                userMapper.update(user);                        }        @Override        public List<User> findByPage(UserPage page) {                return userMapper.findByPage(page);        }        @Override        public Integer getCount(UserPage page) {                return userMapper.getCount(page);        }}我想大家现在都在关心UserDaoImpl中的UserMapper是从哪里来的:首先我们需要一个分页查询的中间类UserPage:public class UserPage {        Integer firstRec;        Integer pageSize;        User user;        }其次就是UserMapper映射了~~~~~~~~package com.pb.mybatis.mapper;public interface UserMapper {                void save(User user);                        List<User> findAll();                        User findById(Integer id);                        void delete(Integer id);                void update(User user);                        List<User> findByPage(UserPage page);                        Integer getCount(UserPage page);}注意UserMapper要与在同一个包下的UserMapper.xml同名,且在同一包下:以下就是UserMapper的映射文件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">         <!-- Mapper文件最好放在与Dao接口同一目次下 --><mapper namespace="com.pb.mybatis.mapper.UserMapper">    <!-- 定义数据库字段与实体对象的映射关系 -->  <resultMap type="com.pb.mybatis.entity.User" id="resultUser">    <id property="id" column="ID"/>    <result property="age" column="AGE"/>    <result property="gender" column="GENDER"/>    <result property="mail" column="MAIL"/>    <result property="nickname" column="NICKNAME"/>    <result property="password" column="PASSWORD"/>    <result property="site" column="SITE"/>    <result property="username" column="USERNAME"/>  </resultMap>    <parameterMap type="com.pb.mybatis.entity.User" id="paramUser">    <parameter property="id"/>    <parameter property="age"/>    <parameter property="gender"/>    <parameter property="mail"/>    <parameter property="nickname"/>    <parameter property="password"/>    <parameter property="site"/>    <parameter property="username"/>  </parameterMap>    <!-- 定义要操纵的SQL语句 -->    <insert id="save" parameterType="com.pb.mybatis.entity.User">     INSERT INTO user(id,age,gender,username,password,mail,nickname,site)    VALUES(#{id},#{age},#{gender},#{username},#{password},#{mail},#{nickname},#{site})  </insert>    <select id="findAll" resultMap="resultUser">    SELECT * FROM user  </select>    <select id="findById" parameterType="Integer" resultMap="resultUser">    SELECT * FROM user    WHERE id=#{value}  </select>    <delete id="delete" parameterType="Integer">    DELETE FROM user     WHERE id=#{value}  </delete>    <update id="update" parameterType="com.pb.mybatis.entity.User" >    UPDATE user    <set>       <if test="age != null">age=#{age},</if>       <if test="gender != null">gender=#{gender},</if>       <if test="username != null">username=#{username},</if>       <if test="password != null">password=#{password},</if>       <if test="mail != null">mail=#{mail},</if>       <if test="nickname != null">nickname=#{nickname},</if>       <if test="site != null">site=#{site},</if>    </set>    WHERE id=#{id}  </update>    <select id="findByPage" parameterType="com.pb.mybatis.util.UserPage" resultMap="resultUser">    SELECT * FROM user    WHERE 1=1    <if test="user != null">       <if test="user.nickname != null">and nickname like #{user.nickname}</if>       <if test="user.username != null">and username like #{user.username}</if>           </if>        LIMIT #{firstRec},#{pageSize}          </select>    <select id="getCount" parameterType="com.pb.mybatis.util.UserPage" resultType="Integer">    SELECT count(*) FROM user    WHERE 1=1    <if test="user != null">              <if test="user.nickname != null">and nickname like #{user.nickname}</if>       <if test="user.username != null">and username like #{user.username}</if>           </if>      </select></mapper>现在是UserService业务层:package com.pb.mybatis.service;import java.util.List;import com.pb.mybatis.entity.User;import com.pb.mybatis.util.UserPage;public interface UserService {                void saveUser(User user);        void updateUser(User user);                void deleteUser(Integer id);                User findById(Integer id);                List<User> findAll();                List<User> findByPage(UserPage page);                Integer getCount(UserPage page);}UserServiceImpl实现:public class UserServiceImpl implements UserService{        private UserDao userDao;                public void setUserDao(UserDao userDao) {                this.userDao = userDao;        }        @Override        public void saveUser(User user) {                userDao.save(user);                        }        @Override        public void deleteUser(Integer id) {                userDao.delete(id);                        }        @Override        public void updateUser(User user) {                userDao.update(user);                        }        @Override        public List<User> findAll() {                return userDao.findAll();        }        @Override        public User findById(Integer id) {                return userDao.findById(id);        }        @Override        public List<User> findByPage(UserPage page) {                return userDao.findByPage(page);        }        @Override        public Integer getCount(UserPage page) {                return userDao.getCount(page);        }}注意,以下就是spring的applicationContext.xml文件的配置了非常重要:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   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.0.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.0.xsd         http://www.springframework.org/schema/tx[/url]         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd         http://www.springframework.org/schema/aop          [url]http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">           <!-- 将所有的配置文件没有放在外面:简单,但可维护性不高 -->    <context:annotation-config/>  <!-- 扫描物理路径及注册 -->   <context:component-scan base-package="com.pb.mybatis.*"/>    <!-- jdbc.properties Directory -->  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">     <property name="locations" value="classpath:jdbc.properties"/>  </bean>  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">     <property name="driverClassName" value="${jdbc.driverClassName}"/>     <property name="url" value="${jdbc.url}"/>     <property name="username" value="${jdbc.username}"/>     <property name="password" value="${jdbc.password}"/>  </bean>  <!-- SqlSessionFactory -->  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">     <property name="dataSource" ref="dataSource"/>  </bean>     <!-- ScanMapperFiles -->  <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">     <property name="basePackage" value="com.pb.mybatis.mapper"/>  </bean>    <!-- TransactionManager Contorl-->  <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">     <property name="dataSource" ref="dataSource"/>  </bean>  <tx:advice id="userTxAdvice" transaction-manager="transactionManager">     <tx:attributes>        <tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException"/>        <tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException"/>        <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception" no-rollback-for="java.lang.RuntimeException"/>        <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>     </tx:attributes>    </tx:advice>  <aop:config>     <!--把事务控制在Service层-->     <aop:pointcut id="pc" expression="execution(* com.pb.mybatis.service.*.*(..))"/>     <aop:advisor advice-ref="userTxAdvice" pointcut-ref="pc"/>  </aop:config>    <!-- Dao Bean-->  <bean id="userDao" class="com.pb.mybatis.dao.impl.UserDaoImpl" autowire="byName"/>    <!-- Service Bean -->  <bean id="userService" class="com.pb.mybatis.service.impl.UserServiceImpl" autowire="byName"/></beans>

作者: 李栋伟    时间: 2013-1-14 16:37
{:soso_e141:} 这大堆




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2