3、spring+mybatis关联映射(无mapper实现类)+idea+maven()

  本篇文章为你整理了3、spring+mybatis关联映射(无mapper实现类)+idea+maven()的详细内容,包含有 3、spring+mybatis关联映射(无mapper实现类)+idea+maven,希望能帮助你了解 3、spring+mybatis关联映射(无mapper实现类)+idea+maven。

  该工程采用spring+mybatis的关联映射,动态sql,sql片段实现

  1、搭建项目结构如下

  

  

  2、配置项目的pom.xml文件中的依赖

  

 1 ?xml version="1.0" encoding="UTF-8"? 

 

   3 project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"

   5 modelVersion 4.0.0 /modelVersion

   7 groupId com /groupId

   8 artifactId springmybatis_day44_03 /artifactId

   9 version 1.0-SNAPSHOT /version

   10 packaging war /packaging

   12 name springmybatis_day44_03 Maven Webapp /name

   13 !-- FIXME change it to the projects website --

   14 url http://www.example.com /url

   16 properties

   17 project.build.sourceEncoding UTF-8 /project.build.sourceEncoding

   18 maven.compiler.source 1.7 /maven.compiler.source

   19 maven.compiler.target 1.7 /maven.compiler.target

   20 /properties

   23 dependencies

   25 dependency

   26 groupId junit /groupId

   27 artifactId junit /artifactId

   28 version 4.11 /version

   29 /dependency

   31 !--1 https://mvnrepository.com/artifact/org.springframework/spring-beans --

   32 dependency

   33 groupId org.springframework /groupId

   34 artifactId spring-beans /artifactId

   35 version 4.3.6.RELEASE /version

   36 /dependency

   39 !--2 https://mvnrepository.com/artifact/org.springframework/spring-context --

   40 dependency

   41 groupId org.springframework /groupId

   42 artifactId spring-context /artifactId

   43 version 4.3.6.RELEASE /version

   44 /dependency

   47 !-- 3https://mvnrepository.com/artifact/org.springframework/spring-core --

   48 dependency

   49 groupId org.springframework /groupId

   50 artifactId spring-core /artifactId

   51 version 4.3.6.RELEASE /version

   52 /dependency

   55 !--4 https://mvnrepository.com/artifact/org.springframework/spring-expression --

   56 dependency

   57 groupId org.springframework /groupId

   58 artifactId spring-expression /artifactId

   59 version 4.3.6.RELEASE /version

   60 /dependency

   63 !--5 https://mvnrepository.com/artifact/org.springframework/spring-aop --

   64 dependency

   65 groupId org.springframework /groupId

   66 artifactId spring-aop /artifactId

   67 version 4.3.6.RELEASE /version

   68 /dependency

   71 !--6 https://mvnrepository.com/artifact/aopalliance/aopalliance --

   72 dependency

   73 groupId aopalliance /groupId

   74 artifactId aopalliance /artifactId

   75 version 1.0 /version

   76 /dependency

   79 !--7 https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --

   80 dependency

   81 groupId org.aspectj /groupId

   82 artifactId aspectjweaver /artifactId

   83 version 1.8.10 /version

   84 /dependency

   87 !--8 https://mvnrepository.com/artifact/log4j/log4j --

   88 dependency

   89 groupId log4j /groupId

   90 artifactId log4j /artifactId

   91 version 1.2.17 /version

   92 /dependency

   95 !--9 https://mvnrepository.com/artifact/commons-logging/commons-logging --

   96 dependency

   97 groupId commons-logging /groupId

   98 artifactId commons-logging /artifactId

   99 version 1.2 /version

  100 /dependency

  103 !--10 https://mvnrepository.com/artifact/org.springframework/spring-jdbc --

  104 dependency

  105 groupId org.springframework /groupId

  106 artifactId spring-jdbc /artifactId

  107 version 4.3.6.RELEASE /version

  108 /dependency

  111 !--11 https://mvnrepository.com/artifact/org.springframework/spring-orm --

  112 dependency

  113 groupId org.springframework /groupId

  114 artifactId spring-orm /artifactId

  115 version 4.3.6.RELEASE /version

  116 /dependency

  119 !--12 https://mvnrepository.com/artifact/org.springframework/spring-tx --

  120 dependency

  121 groupId org.springframework /groupId

  122 artifactId spring-tx /artifactId

  123 version 4.3.6.RELEASE /version

  124 /dependency

  127 !--13 https://mvnrepository.com/artifact/org.springframework/spring-web --

  128 dependency

  129 groupId org.springframework /groupId

  130 artifactId spring-web /artifactId

  131 version 4.3.6.RELEASE /version

  132 /dependency

  135 !--14 https://mvnrepository.com/artifact/org.springframework/spring-webmvc --

  136 dependency

  137 groupId org.springframework /groupId

  138 artifactId spring-webmvc /artifactId

  139 version 4.3.6.RELEASE /version

  140 /dependency

  143 !--15 https://mvnrepository.com/artifact/org.mybatis/mybatis --

  144 dependency

  145 groupId org.mybatis /groupId

  146 artifactId mybatis /artifactId

  147 version 3.4.6 /version

  148 /dependency

  150 !--17 https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --

  151 dependency

  152 groupId org.mybatis /groupId

  153 artifactId mybatis-spring /artifactId

  154 version 1.3.2 /version

  155 /dependency

  158 !--16 https://mvnrepository.com/artifact/mysql/mysql-connector-java --

  159 dependency

  160 groupId mysql /groupId

  161 artifactId mysql-connector-java /artifactId

  162 version 5.1.38 /version

  163 /dependency

  166 !--18 https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --

  167 dependency

  168 groupId javax.servlet /groupId

  169 artifactId javax.servlet-api /artifactId

  170 version 3.1.0 /version

  171 /dependency

  173 !--19 https://mvnrepository.com/artifact/javax.servlet/jstl --

  174 dependency

  175 groupId javax.servlet /groupId

  176 artifactId jstl /artifactId

  177 version 1.2 /version

  178 /dependency

  181 !--20 https://mvnrepository.com/artifact/taglibs/standard --

  182 dependency

  183 groupId taglibs /groupId

  184 artifactId standard /artifactId

  185 version 1.1.2 /version

  186 /dependency

  188 /dependencies

  190 /project

 

  pom.xml

  3、在java目录下的com.pojo包下构建2个实体类,即Dept.java 和Emp.java

  

 1 package com.pojo;

 

   2 import java.util.List;

   3 /**

   4 * 一方引用多方list集合

   5 */

   6 public class Dept {

   7 private Integer deptno ;

   8 private String dname ;

   9 private String loc ;

  11 public Dept() {

  14 public Dept(Integer deptno, String dname, String loc) {

  15 this.deptno = deptno;

  16 this.dname = dname;

  17 this.loc = loc;

  20 public Integer getDeptno() {

  21 return deptno;

  24 public void setDeptno(Integer deptno) {

  25 this.deptno = deptno;

  29 public String getDname() {

  30 return dname;

  33 public void setDname(String dname) {

  34 this.dname = dname;

  38 public String getLoc() {

  39 return loc;

  42 public void setLoc(String loc) {

  43 this.loc = loc;

  46 @Override

  47 public String toString() {

  48 return "Dept{" +

  49 "deptno=" + deptno +

  50 ", dname=" + dname + \ +

  51 ", loc=" + loc + \ +

  52 };

  54 }

 

  Dept.java

  

 1 package com.pojo;

 

   3 /**

   4 * 多方引用一方对象

   5 */

   6 public class Emp {

   7 private Integer empno ;

   8 private String ename ;

   9 private String job ;

   10 private Integer mgr ;

   11 private String hiredate ;

   12 private Double sal ;

   13 private Double comm ;

   14 private Dept dept;

   16 public Emp() {

   17 }

   19 public Emp(Integer empno, String ename, String job, Integer mgr, String hiredate, Double sal, Double comm, Dept dept) {

   20 this.empno = empno;

   21 this.ename = ename;

   22 this.job = job;

   23 this.mgr = mgr;

   24 this.hiredate = hiredate;

   25 this.sal = sal;

   26 this.comm = comm;

   27 this.dept = dept;

   28 }

   30 public Integer getEmpno() {

   31 return empno;

   32 }

   34 public void setEmpno(Integer empno) {

   35 this.empno = empno;

   36 }

   39 public String getEname() {

   40 return ename;

   41 }

   43 public void setEname(String ename) {

   44 this.ename = ename;

   45 }

   48 public String getJob() {

   49 return job;

   50 }

   52 public void setJob(String job) {

   53 this.job = job;

   54 }

   57 public Integer getMgr() {

   58 return mgr;

   59 }

   61 public void setMgr(Integer mgr) {

   62 this.mgr = mgr;

   63 }

   66 public String getHiredate() {

   67 return hiredate;

   68 }

   70 public void setHiredate(String hiredate) {

   71 this.hiredate = hiredate;

   72 }

   75 public Double getSal() {

   76 return sal;

   77 }

   79 public void setSal(Double sal) {

   80 this.sal = sal;

   81 }

   84 public Double getComm() {

   85 return comm;

   86 }

   88 public void setComm(Double comm) {

   89 this.comm = comm;

   90 }

   92 public Dept getDept() {

   93 return dept;

   94 }

   96 public void setDept(Dept dept) {

   97 this.dept = dept;

   98 }

  100 @Override

  101 public String toString() {

  102 return "Emp{" +

  103 "empno=" + empno +

  104 ", ename=" + ename + \ +

  105 ", job=" + job + \ +

  106 ", mgr=" + mgr +

  107 ", hiredate=" + hiredate + \ +

  108 ", sal=" + sal +

  109 ", comm=" + comm +

  110 ", dept=" + dept +

  111 };

  112 }

  113 }

 

  Emp.java

  4、在java目录下的com.mapper包下构建2个映射接口,即DeptMapppr.java 和EmpMapper.java

  

1 package com.mapper;

 

  2 import com.pojo.Dept;

  3 import java.util.List;

  4 public interface DeptMapper {

  5 List Dept selectAllDept();

  6 }

 

  DeptMapper.java

  

 1 package com.mapper;

 

   3 import com.pojo.Emp;

   5 import java.util.List;

   7 public interface EmpMapper {

   8 List Emp selectEmp(Emp emp);

   9 int insertEmp(Emp emp);

  10 int updateEmp(Emp emp);

  11 int deleteEmp(Emp emp);

  12 }

 

  EmpMapper.java

  5、在java目录下的com.servicer包下构建2个业务层接口,即DeptService.java 和EmpService.java,和2个业务层接口实现类,即DeptServiceImpl.java 和EmpServiceImpl.java

  

1 package com.service;

 

  3 import com.pojo.Dept;

  5 import java.util.List;

  7 public interface DeptService {

  8 List Dept downOption();

  9 }

 

  DeptService.java

  

 1 package com.service;

 

   3 import com.pojo.Emp;

   5 import java.util.List;

   7 public interface EmpService {

   8 List Emp show(Emp emp);

   9 int add(Emp emp);

  10 int edit(Emp emp);

  11 int del(Emp emp);

  12 }

 

  EmpService.java

  

 1 package com.service;

 

   3 import com.mapper.DeptMapper;

   4 import com.pojo.Dept;

   6 import java.util.List;

   8 public class DeptServiceImpl implements DeptService{

   9 private DeptMapper deptMapper;

  11 public DeptMapper getDeptMapper() {

  12 return deptMapper;

  15 public void setDeptMapper(DeptMapper deptMapper) {

  16 this.deptMapper = deptMapper;

  19 @Override

  20 public List Dept downOption() {

  21 return deptMapper.selectAllDept();

  23 }

 

  DeptServiceImpl.java

  

 1 package com.service;

 

   3 import com.mapper.EmpMapper;

   4 import com.pojo.Emp;

   6 import java.util.List;

   8 public class EmpServiceImpl implements EmpService {

   9 private EmpMapper empMapper;

  11 public EmpMapper getEmpMapper() {

  12 return empMapper;

  15 public void setEmpMapper(EmpMapper empMapper) {

  16 this.empMapper = empMapper;

  19 @Override

  20 public List Emp show(Emp emp) {

  21 return empMapper.selectEmp(emp);

  24 @Override

  25 public int add(Emp emp) {

  26 return empMapper.insertEmp(emp);

  29 @Override

  30 public int edit(Emp emp) {

  31 return empMapper.updateEmp(emp);

  34 @Override

  35 public int del(Emp emp) {

  36 return empMapper.deleteEmp(emp);

  38 }

 

  EmpServiceImpl.java

  6、在resources目录下的mapper包下构建2个映射xml文件,即DeptMapppr.xml和EmpMapper.xml

  

 1 ?xml version="1.0" encoding="UTF-8" ? 

 

   2 !DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"

   3 !--配置规则:--

   4 !--有代理的namespace值必须是映射接口全路径,sql节点的id值必须是映射接口中的方法名--

   5 !--无代理的namespace值和sql节点的id值是任意的,但一般情况下和和有代理的原则一样--

   6 mapper namespace="com.mapper.DeptMapper"

   7 select id="selectAllDept" resultType="Dept"

   8 select * from dept

   9 /select

  10 /mapper

 

  DeptMapppr.xml

  

 1 ?xml version="1.0" encoding="UTF-8" ? 

 

   2 !DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"

   3 mapper namespace="com.mapper.EmpMapper"

   4 !-- 案例:select * from emp where empno=#{empno} or ename=#{ename} and job=#{job}

   5 如果select节点中是以上sql语句,parameterType是Emp类型,则此情况可以使用where标签,

   6 where标签的作用是如果if条件不满足则执行,如果满足if条件将会忽略where关键字后的

   7 第一个or或and

   8 select * from emp

   9 where

   10 if test="empno!=null"

   11 empno=#{empno}

   12 /if

   13 if test="ename!=null"

   14 or ename=#{ename}

   15 /if

   16 if test="job!=null"

   17 and job=#{job}

   18 /if

   19 /where

   20 --

   21 !--if或when的test条件中的属性判断,必须从参数对象的第一层属性判断起,--

   22 !--如果Emp类中有empno属性,有dept对象属性,则要判断empno值和dept中deptno的值,--

   23 !--则写法是empno!=null,dept!=null dept.deptno!=null--

   24 select id="selectEmp" resultMap="empmap" parameterType="Emp"

   25 select d.dname,d.loc,e.* from emp e,dept d where e.deptno=d.deptno

   26 if test="empno!=null"

   27 and e.empno=#{empno}

   28 /if

   29 if test="ename!=null"

   30 and e.ename=#{ename}

   31 /if

   32 if test="job!=null"

   33 and e.job=#{job}

   34 /if

   35 if test="dept!=null and dept.deptno!=null"

   36 and e.deptno=#{dept.deptno}

   37 /if

   38 /select

   40 resultMap id="empmap" type="Emp"

   41 !--因为当前多方配置,因此在resultMap中先配置多方的主键和普通列的映射--

   42 id column="EMPNO" property="empno"/

   43 result column="ENAME" property="ename"/

   44 result column="JOB " property="job"/

   45 result column="MGR" property="mgr"/

   46 result column="HIREDATE" property="hiredate"/

   47 result column="SAL" property="sal"/

   48 result column="COMM" property="comm"/

   50 !--因为在多方引用了一方的对象,因此在引用一方对象属性的地方配置association节点--

   51 !--association节点的property属性对应的多方引用一方的对象属性名,--

   52 !--javaType是多方引用一方的类类型即配置类的全路径--

   53 !--column是多方关联一方的外键列的列名--

   54 association property="dept" javaType="Dept" column="DEPTNO"

   55 !--由于多方引用的了一方对象,因此在association对象节点下配置一方的主键和普通字段--

   56 id column="DEPTNO" property="deptno"/

   57 result column="DNAME" property="dname"/

   58 result column="LOC" property="loc"/

   59 /association

   60 /resultMap

   62 insert id="insertEmp" parameterType="Emp"

   63 INSERT INTO emp(empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES

   64 (#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{dept.deptno})

   65 /insert

   67 !--set标签的结束标签要在where条件之前--

   68 update id="updateEmp" parameterType="Emp"

   69 UPDATE emp

   70 set

   71 if test="ename!=null"

   72 ename=#{ename} ,

   73 /if

   74 if test="job!=null"

   75 job=#{job} ,

   76 /if

   77 if test="mgr!=null"

   78 mgr=#{mgr} ,

   79 /if

   80 if test="hiredate!=null"

   81 hiredate=#{hiredate} ,

   82 /if

   83 if test="sal!=null"

   84 sal=#{sal},

   85 /if

   86 if test="comm!=null"

   87 comm=#{comm},

   88 /if

   89 if test="dept!=null and dept.deptno!=null"

   90 deptno=#{dept.deptno} ,

   91 /if

   92 /set

   93 include refid="wherecondition"/

   94 /update

   96 delete id="deleteEmp" parameterType="Emp"

   97 delete from emp

   98 include refid="wherecondition"/

   99 /delete

  101 !--定义公共的sql片段--

  102 sql id="wherecondition"

  103 where

  104 if test="empno!=null"

  105 empno=#{empno}

  106 /if

  107 /where

  108 /sql

  110 /mapper

 

  EmpMapper.xml

  7、在resources根目录下编辑log4j.properties日志文件

  

 1 log4j.rootLogger=DEBUG, Console 

 

   2 #Console

   3 log4j.appender.Console=org.apache.log4j.ConsoleAppender

   4 log4j.appender.Console.layout=org.apache.log4j.PatternLayout

   5 log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n

   7 log4j.logger.org.apache=INFO

   8 log4j.logger.java.sql.ResultSet=INFO

   9 log4j.logger.java.sql.Connection=DEBUG

  10 log4j.logger.java.sql.Statement=DEBUG

  11 log4j.logger.java.sql.PreparedStatement=DEBUG

 

  log4j.properties

  8、在resources根目录下构建spring的xml文件,即applicationContext.xml日志文件

  

 1 ?xml version="1.0" encoding="UTF-8"? 

 

   2 beans xmlns="http://www.springframework.org/schema/beans"

   3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   4 xmlns:aop="http://www.springframework.org/schema/aop"

   5 xmlns:context="http://www.springframework.org/schema/context"

   6 xmlns:tx="http://www.springframework.org/schema/tx"

   7 xmlns:mvc="http://www.springframework.org/schema/mvc"

   8 xsi:schemaLocation="http://www.springframework.org/schema/beans

   9 http://www.springframework.org/schema/beans/spring-beans.xsd

  10 http://www.springframework.org/schema/aop

  11 http://www.springframework.org/schema/aop/spring-aop.xsd

  12 http://www.springframework.org/schema/context

  13 http://www.springframework.org/schema/context/spring-context.xsd

  14 http://www.springframework.org/schema/tx

  15 http://www.springframework.org/schema/tx/spring-tx.xsd

  16 http://www.springframework.org/schema/mvc

  17 http://www.springframework.org/schema/mvc/spring-mvc.xsd

  18 "

  19 !--1.驱动管理数据源--

  20 bean id="dataSource"

  21 property name="driverClassName" value="com.mysql.jdbc.Driver"/

  22 property name="url" value="jdbc:mysql://localhost:3306/ar"/

  23 property name="username" value="root"/

  24 property name="password" value="123456"/

  25 /bean

  26 !--2.数据源事务管理,注意id的必须是transactionManager--

  27 bean id="transactionManager"

  28 property name="dataSource" ref="dataSource"/

  29 /bean

  30 !--3.事务注解驱动--

  31 tx:annotation-driven transaction-manager="transactionManager"/

  32 !--4.sqlsessionfactorybean--

  33 bean id="sqlSessionFactory"

  34 property name="dataSource" ref="dataSource"/

  35 !--配置某个包下的类全路径的别名,别名是类名--

  36 property name="typeAliasesPackage" value="com.pojo"/

  38 !--引用mybatis映射文件的写法--

  39 property name="mapperLocations" value="classpath:mapper/*.xml"/

  41 !--引用mybatis主配置文件的写法--

  42 !-- property name="configLocation" value="mybatisConfig.xml"/ --

  43 /bean

  45 !--5.SqlSessionTemplate--

  46 !--采用构造注入--

  47 bean id="sqlSessionTemplate"

  48 constructor-arg ref="sqlSessionFactory"/

  49 /bean

  51 !--6.映射工厂bean,引用映射接口,底层代理会自动帮我们完成映射接口实现类的部分--

  52 bean id="deptMapper"

  53 property name="sqlSessionTemplate" ref="sqlSessionTemplate"/

  54 property name="mapperInterface" value="com.mapper.DeptMapper"/

  55 /bean

  57 bean id="empMapper"

  58 property name="sqlSessionTemplate" ref="sqlSessionTemplate"/

  59 property name="mapperInterface" value="com.mapper.EmpMapper"/

  60 /bean

  62 bean id="deptService"

  63 property name="deptMapper" ref="deptMapper"/

  64 /bean

  65 bean id="empService"

  66 property name="empMapper" ref="empMapper"/

  67 /bean

  68 /beans

 

  applicationContext.xml

  9、在java目录下的com.test包下构建测试类,即ScottTest.java

  

 1 package com.test;

 

   2 import com.mapper.DeptMapper;

   3 import com.mapper.EmpMapper;

   4 import com.pojo.Dept;

   5 import com.pojo.Emp;

   6 import com.service.DeptService;

   7 import com.service.EmpService;

   8 import org.junit.Test;

   9 import org.springframework.context.ApplicationContext;

  10 import org.springframework.context.support.ClassPathXmlApplicationContext;

  11 import java.util.List;

  12 public class ScottTest {

  13 ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");

  14 DeptService deptService= (DeptService)ac.getBean("deptService");

  15 EmpService empService= (EmpService)ac.getBean("empService");

  17 @Test

  18 public void selectDept(){

  20 List Dept deptList=deptService.downOption();

  21 for (Dept d:deptList) {

  22 System.out.println(d);

  26 @Test

  27 public void selectEmp(){

  28 Emp emp=new Emp();

  29 // emp.setEmpno(7788);

  30 // emp.setEname("SCOTT");

  31 // emp.setJob("SALESMAN");

  32 emp.setDept(new Dept(20,null,null));

  33 List Emp emplist=empService.show(emp);

  34 for (Emp e:emplist ) {

  35 System.out.println(e);

  39 @Test

  40 public void insertEmp(){

  41 Dept dept= new Dept(10,null,null);

  42 Emp emp=new Emp(1,"holly","teacher",7788,

  43 "2015-05-05",1200.00,15.00,dept);

  44 System.out.println(empService.add(emp) 0?"add success":"add fail");

  46 @Test

  47 public void updateEmp(){

  48 Dept dept= new Dept(20,null,null);

  49 Emp emp=new Emp(1,"holly","teacher",7788,

  50 "2015-05-05",1200.00,15.00,dept);

  51 System.out.println(empService.edit(emp) 0?"update success":"update fail");

  53 @Test

  54 public void deleteEmp(){

  55 Emp emp=new Emp();

  56 emp.setEmpno(1);

  57 System.out.println(empService.del(emp) 0?"delete success":"delete fail");

  59 }

 

  ScottTest.java

  10、简单测试某个方法

  

  

  此文章为原创,转载请注明出处!需要本案例源码,理论讲解视频,代码操作视频的,请私信联系作者!

  

  以上就是3、spring+mybatis关联映射(无mapper实现类)+idea+maven()的详细内容,想要了解更多 3、spring+mybatis关联映射(无mapper实现类)+idea+maven的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: