myBatis+Spring一对一增删改查

**准备工作-->创建表

我们的目标是写一对一的增删改查,所以写两个表《一个User用户表 一个Detial详细表(就是把不常用的字段写到详细表)》

我们是用主表的userId和详细表的userId进行关联

user表

userId userName userPwd rName birthday
int-主键-自增 varchar(50) varchar(50) varchar(50) varchar(100)

userdetial表

detId sex address userId
int-主键-自增 varchar(50) varchar(100) int

**创建项目

1.创建动态web工程,名称自取

2.导入左图中的jar包,有需要的话在网上下载

3.创建beans.xml文件,进行配置,配置代码下面展示

4.写jdbc.properties数据库的连接

5.mybatis-config.xml是写日志的

6.创建包 dao service test(里面是junit测试) vo实体类

代码展示

jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///数据库的名称
user=root
pwd=root

Beans.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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:task="http://www.springframework.org/schema/task"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    <!-- 扫描包 -->
    <context:component-scan base-package="com.bw"></context:component-scan>
    <!-- 引入JDBC文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 加载数据源DriverManagerDataSource -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${user}"></property>
        <property name="password" value="${pwd}"></property>
    </bean>
    <!-- 配置SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="typeAliasesPackage" value="com.bw.vo"></property>
        <property name="mapperLocations" value="com/bw/dao/*.xml"></property>
    </bean>
    <!-- 将Mapper接口生成代理注入到Spring -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.bw.dao"></property>
    </bean>
</beans>

mybatis-config.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" >
3 <configuration>
4     <settings>
5         <setting name="logImpl" value="STDOUT_LOGGING"/>
6     </settings>
7 </configuration>
User实体类,写在vo包中
 1 package com.bw.vo;
 2 /**
 3  * user实体类
 4  * @author cg
 5  * userId userName userPwd rName birthday **UserDtial类
 6  * 主表
 7  */
 8 public class User {
 9 
10     private int userId;
11     private String userName;
12     private String userPwd;
13     private String rName;
14     private String birthday;
15     
16     private UserDetial userDetial;
17 
18     public int getUserId() {
19         return userId;
20     }
21 
22     public void setUserId(int userId) {
23         this.userId = userId;
24     }
25 
26     public String getUserName() {
27         return userName;
28     }
29 
30     public void setUserName(String userName) {
31         this.userName = userName;
32     }
33 
34     public String getUserPwd() {
35         return userPwd;
36     }
37 
38     public void setUserPwd(String userPwd) {
39         this.userPwd = userPwd;
40     }
41 
42     public String getrName() {
43         return rName;
44     }
45 
46     public void setrName(String rName) {
47         this.rName = rName;
48     }
49 
50     public String getBirthday() {
51         return birthday;
52     }
53 
54     public void setBirthday(String birthday) {
55         this.birthday = birthday;
56     }
57 
58     public UserDetial getUserDetial() {
59         return userDetial;
60     }
61 
62     public void setUserDetial(UserDetial userDetial) {
63         this.userDetial = userDetial;
64     }
65 
66     @Override
67     public String toString() {
68         return "User [userId=" + userId + ", userName=" + userName + ", userPwd=" + userPwd + ", rName=" + rName
69                 + ", birthday=" + birthday + ", userDetial=" + userDetial + "]";
70     }
71 }

UserDetial实体类,写在vo包中

 1 package com.bw.vo;
 2 /**
 3  * user的详细表
 4  * @author cg
 5  * detId详细表id sex性别 address地址  **User
 6  * 从表
 7  */
 8 public class UserDetial {
 9 
10     private int detId;
11     private String sex;
12     private String address;
13     
14     private User user;
15 
16     public int getDetId() {
17         return detId;
18     }
19 
20     public void setDetId(int detId) {
21         this.detId = detId;
22     }
23 
24     public String getSex() {
25         return sex;
26     }
27 
28     public void setSex(String sex) {
29         this.sex = sex;
30     }
31 
32     public String getAddress() {
33         return address;
34     }
35 
36     public void setAddress(String address) {
37         this.address = address;
38     }
39 
40     public User getUser() {
41         return user;
42     }
43 
44     public void setUser(User user) {
45         this.user = user;
46     }
47 
48     @Override
49     public String toString() {
50         return "UserDetial [detId=" + detId + ", sex=" + sex + ", address=" + address + ", user=" + user + "]";
51     }
52     
53 }
service层增删改查方法,写UserService接口
 1 package com.bw.service;
 2 
 3 import java.util.List;
 4 
 5 import com.bw.vo.User;
 6 
 7 /**
 8  * service层接口
 9  * @author cg
10  *
11  */
12 public interface UserService {
13 
14     List list(User user);
15 
16     int add(User user);
17 
18     int delete(int userId);
19 
20     int update(User user);
21 
22 }
service层方法接口的实现UserServiceImpl
 1 package com.bw.service.impl;
 2 
 3 import java.util.List;
 4 
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Service;
 7 
 8 import com.bw.dao.UserDao;
 9 import com.bw.service.UserService;
10 import com.bw.vo.User;
11 import com.bw.vo.UserDetial;
12 /**
13  * service层实现类
14  * @author cg
15  *
16  */
17 @Service
18 public class UserServiceImpl implements UserService{
19 
20     //需要引入dao-调用dao接口中的方法
21     @Autowired
22     UserDao userDao;
23 
24     @Override
25     public List list(User user) {
26         // TODO Auto-generated method stub
27         return userDao.list(user);
28     }
29 
30     @Override
31     public int add(User user) {
32         // TODO Auto-generated method stub
33         //添加主表
34         int i = userDao.saveUser(user);
35         //根据主表添加的自增id添加明细表
36         if(i>0) {
37             UserDetial ud = new UserDetial();
38             ud = user.getUserDetial();
39             ud.setUser(user);
40             i = userDao.saveUserDetial(ud);
41         }
42         return i;
43     }
44 
45     @Override
46     public int delete(int userId) {
47         // TODO Auto-generated method stub
48         //主表的删除id
49         int i = userDao.deleteUser(userId);
50         //从表的删除 外键
51         i = userDao.deleteUserDetial(userId);
52         return i;
53     }
54 
55     @Override
56     public int update(User user) {
57         // TODO Auto-generated method stub
58         int i = userDao.updateUser(user);
59         UserDetial ud = new UserDetial();
60         ud=user.getUserDetial();
61         ud.setUser(user);
62         
63         i = userDao.updateDetial(ud);
64         return i;
65     }
66 }
dao层接口
 1 package com.bw.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.bw.vo.User;
 6 import com.bw.vo.UserDetial;
 7 
 8 /**
 9  * Dao层接口
10  * userDao全限定名--com.bw.dao.UserDao
11  * @author cg
12  *
13  */
14 public interface UserDao {
15 
16     List list(User user);
17 
18     int saveUser(User user);
19 
20     int saveUserDetial(UserDetial ud);
21 
22     int deleteUser(int userId);
23 
24     int deleteUserDetial(int userId);
25 
26     int updateUser(User user);
27 
28     int updateDetial(UserDetial ud);
29 }
UserMapper.xml是写增删改查代码的xml,一般和dao接口写在一起
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 3 <mapper namespace="com.bw.dao.UserDao">
 4     <resultMap type="com.bw.vo.User" id="myuser">
 5         <id property="userId" column="userId"/>
 6         <id property="userName" column="userName"/>
 7         <id property="userPwd" column="userPwd"/>
 8         <id property="rName" column="rName"/>
 9         <id property="birthday" column="birthday"/>
10         <collection property="userDetial" ofType="com.bw.vo.UserDetial">
11             <id property="detId" column="detId"/>
12             <result property="sex" column="sex"/>
13             <result property="address" column="address"/>
14         </collection>
15     </resultMap>
16 
17 
18     <select id="list" resultMap="myuser" parameterType="com.bw.vo.User">
19         select a.*,b.detId,b.sex,b.address from wk_user a inner join wk_userdetial b on a.userId=b.userId
20         <where>
21             <if test="userName!=null and userName!=''">
22                 and a.userName like concat('%',#{userName},'%')
23             </if>
24             <if test="userDetial.address!=null and userDetial.address!=''">
25                 and b.address like concat('%',#{userDetial.address},'%')
26             </if>
27         </where>order by a.birthday desc
28     </select>
29     <!-- 获取主表自增的id -->
30     <insert id="saveUser" parameterType="com.bw.vo.User">
31         insert into wk_user values(null,#{userName},#{userPwd},#{rName},#{birthday})
32         <selectKey keyProperty="userId" order="AFTER" resultType="java.lang.Integer">
33             select last_insert_id() as userId
34         </selectKey>
35     </insert>
36     <insert id="saveUserDetial" parameterType="com.bw.vo.UserDetial">
37         insert into wk_userdetial values(null,#{sex},#{address},#{user.userId})
38     </insert>
39     
40     <delete id="deleteUser" parameterType="int">
41         delete from wk_user where userId = #{userId}
42     </delete>
43     <delete id="deleteUserDetial" parameterType="int">
44         delete from wk_userdetial where userId = #{userId}
45     </delete>
46     
47     <update id="updateUser" parameterType="com.bw.vo.User">
48         update wk_user
49         <set>
50             <if test="userName!=null">userName=#{userName},</if>
51             <if test="userPwd!=null">userPwd=#{userPwd},</if>
52             <if test="rName!=null">rName=#{rName},</if>
53             <if test="birthday!=null">birthday=#{birthday},</if>
54         </set>
55         where userId=#{userId}
56     </update>
57     <update id="updateDetial" parameterType="com.bw.vo.UserDetial">
58         update wk_userdetial
59         <set>
60             <if test="sex!=null">sex=#{sex},</if>
61             <if test="address!=null">address=#{address},</if>
62         </set>
63         where userId=#{user.userId}
64     </update>
65 </mapper>
Test测试类
 1 package com.bw.test;
 2 
 3 
 4 import java.util.List;
 5 
 6 import org.junit.Test;
 7 import org.springframework.context.ApplicationContext;
 8 import org.springframework.context.support.ClassPathXmlApplicationContext;
 9 
10 import com.bw.service.UserService;
11 import com.bw.vo.User;
12 import com.bw.vo.UserDetial;
13 
14 public class MyTest {
15     User user = new User();
16     UserDetial ud = new UserDetial();
17 
18     @Test
19     public void list() {
20         //引入配置文件
21         ApplicationContext ac = new ClassPathXmlApplicationContext("Beans.xml");
22         UserService us = (UserService) ac.getBean("userServiceImpl");
23         user.setUserName("l");
24         ud.setAddress("陕西");
25         user.setUserDetial(ud);
26         List list = us.list(user);
27         for (Object object : list) {
28             System.out.println(object);
29         }
30     }
31     
32     @Test
33     public void add() {
34         //引入配置文件
35         ApplicationContext ac = new ClassPathXmlApplicationContext("Beans.xml");
36         UserService us = (UserService) ac.getBean("userServiceImpl");
37         user.setUserName("hanxin");
38         user.setUserPwd("666");
39         user.setrName("韩信");
40         user.setBirthday("1965-02-29");
41         ud.setSex("男");
42         ud.setAddress("辽国大草原");
43         user.setUserDetial(ud);
44         int i = us.add(user);
45         if(i>0) {
46             System.out.println("添加成功");
47         }else {
48             System.out.println("添加失败");
49         }
50     }
51     
52     @Test
53     public void delete() {
54         //引入配置文件
55         ApplicationContext ac = new ClassPathXmlApplicationContext("Beans.xml");
56         UserService us = (UserService) ac.getBean("userServiceImpl");
57         int userId = 6;
58         int i = us.delete(userId);
59         if(i>0) {
60             System.out.println("删除成功");
61         }else {
62             System.out.println("删除失败");
63         }
64     }
65     
66     @Test
67     public void update() {
68         //引入配置文件
69         ApplicationContext ac = new ClassPathXmlApplicationContext("Beans.xml");
70         UserService us = (UserService) ac.getBean("userServiceImpl");
71         user.setUserId(7);
72         user.setUserName("cl");
73         user.setUserPwd("888");
74         user.setrName("成龙");
75         ud.setSex("男");
76         ud.setAddress("北京市房山");
77         user.setUserDetial(ud);
78         int i = us.update(user);
79         if(i>0) {
80             System.out.println("修改成功");
81         }else {
82             System.out.println("修改失败");
83         }
84     }
85 
86 }

猜你喜欢

转载自www.cnblogs.com/chen-gang/p/12386647.html