赞
踩
**
**
这道题虽然也不难,但也遇到了一些小问题。
解决问题后,心情是舒畅滴!
所以,俺要记录一下!
以后回来翻翻又是一个满满的回忆!
题目如下:
采用sprms+. bat"框架完成dep表和emp表的关联查询操作,将所编写的所有代码要求如下:
1、利用M-Sql创建数据库: exam,根据附件中提供的sq语向分别创建部门表: dep和员工表: emp, 并将创建成功后的表截图粘贴在答案区。(5)
2、新建一个Dynamic Web projet,编写mybatis-config xml、applicatonContext xm和db propertes配置文件,完成“Sprng+Mybatis""的环境搭建,代码截图粘贴在答案区。(20分)
3、新建Dep实体类和Emp实体类,代码截图粘贴在答案区。(15分)
4、新建EmpMapper接口及相应的Mappe映射文件,使用嵌套结果的方式实现“研发部”所有员工详细信息的查询操作,将查询的结果封装到Dep的对象中,代码截图粘贴在答案区。(35分)
5、编写测试类,使用单元测试完成测试,并将运行结果(控制台输出的员工的详细信息)截图粘贴。
**既然要求都说清楚了,那我们接下来就一步一步清晰明了的分析解决问题!
此处请记笔记:一步一步,清晰,明了,分析,解决!
第一个问题是:
1、利用M-Sql创建数据库: exam,根据附件中提供的sq语向分别创建部门表: dept和员工表: emp。
1.1:创建exam数据库:
这里注意一下,一定要把字符集改成utf-8,后面可以减少乱码的问题。
1.2:创建表:部门表:dept,员工表: emp
此处我们直接在mysql里面用“新建查询”的方法来建立表,并向表中插入数据。
“新建查询”代码:
-- 部门表
DROP TABLE IF EXISTS dept;
create table dept(
deptno int primary key auto_increment, -- 部门编号
dname varchar(20) , -- 部门名字
loc varchar(13) -- 地址
)ENGINE=MyISAM DEFAULT CHARSET=utf8;;
insert into dept values(10,'财务部','北京');
insert into dept values(20,'研发部','上海');
insert into dept values(30,'销售部','广州');
insert into dept values(40,'行政部','深圳');
-- 员工表 DROP TABLE IF EXISTS emp; create table emp( empno int primary key auto_increment,-- 员工编号 ename varchar(20), -- 员工姓名 - job varchar(20), -- 岗位 mgr int, -- 直接领导编号 hiredate date, -- 雇佣日期,入职日期 sal int, -- 薪水 comm int, -- 提成 deptno int -- 部门编号 )ENGINE=MyISAM DEFAULT CHARSET=utf8; insert into emp values(7369,'刘一','职员',7902,'1980-12-17',800,null,20); insert into emp values(7499,'陈二','推销员',7698,'1981-02-20',1600,300,30); insert into emp values(7521,'张三','推销员',7698,'1981-02-22',1250,500,30); insert into emp values(7566,'李四','经理',7839,'1981-04-02',2975,null,20); insert into emp values(7654,'王五','推销员',7698,'1981-09-28',1250,1400,30); insert into emp values(7698,'赵六','经理',7839,'1981-05-01',2850,null,30); insert into emp values(7782,'孙七','经理',7839,'1981-06-09',2450,null,10); insert into emp values(7788,'周八','分析师',7566,'1987-06-13',3000,null,20); insert into emp values(7839,'吴九','总裁',null,'1981-11-17',5000,null,10); insert into emp values(7844,'郑十','推销员',7698,'1981-09-08',1500,0,30); insert into emp values(7876,'郭十一','职员',7788,'1987-06-13',1100,null,20); insert into emp values(7900,'钱多多','职员',7698,'1981-12-03',950,null,30); insert into emp values(7902,'大锦鲤','分析师',7566,'1981-12-03',3000,null,20); insert into emp values(7934,'木有钱','职员',7782,'1983-01-23',1300,null,10);
运行代码后得到两个表,结果如下:
这样一来,我们就完成了第一个要求啦!
第二个问题是:
2.新建一个Dynamic Web projet,编写mybatis-config xml、applicatonContext xml和db propertes配置文件,完成“Sprng+Mybatis""的环境搭建。
那接下来我们先新建数据库配置文件:
2.1:
db propertes:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/exam?characterEncoding=utf-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
jdbc.maxTotal=30
jdbc.maxIdle=10
jdbc.initialSize=5
这里提醒一下,要按照自己的数据库账号密码,每个人的可能不一样。
然后是数据库连接驱动的问题,我用的是8.0版本的。
如果数据库连接报错可以参考一下我的上一篇文章数据库连接报错
希望对你有帮助。
2.2:
mybatis-config xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.po"/>
</typeAliases>
<mappers>
<mapper resource="com/dao/EmpMapper.xml" />
</mappers>
</configuration>
其中重点的就是配置引入你的mapper路径。:“com/dao/EmpMapper.xml”
2.3.
applicatonContext 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:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-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/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!--只提供部分代码,请自己完善--> <!--读取db.properties --> <context:property-placeholder location="classpath:db.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <!--数据库驱动 --> <property name="driverClassName" value="${jdbc.driver}" /> <!--连接数据库的url --> <property name="url" value="${jdbc.url}" /> <!--连接数据库的用户名 --> <property name="username" value="${jdbc.username}" /> <!--连接数据库的密码 --> <property name="password" value="${jdbc.password}" /> <!--最大连接数 --> <property name="maxTotal" value="${jdbc.maxTotal}" /> <!--最大空闲连接 --> <property name="maxIdle" value="${jdbc.maxIdle}" /> <!--初始化连接数 --> <property name="initialSize" value="${jdbc.initialSize}" /> </bean> <!--配置MyBatis工厂 --> <bean id="sqlsessionfactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据源 --> <property name="dataSource" ref="dataSource"/> <!-- 指定核心配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!-- Mapper代理开发(基于MapperScannerConfigurer) --> <bean id="EmpMappermapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="com.dao.EmpMapper"/> <property name="sqlSessionFactory" ref="sqlsessionfactory"/> </bean> </beans>
这里讲一下,
dataSoure里面的数据库value值要和db.propertes文件的属性名相对应。
配置Mybatis工厂是整合spring和mybatis的重点。
在mapper代理开发中对应的接口路径和Mybatis工厂的引用要填写正确。
逻辑就写在代码注释里了。
至此,我们就完成了第二个要求。
第三个问题是:
3.新建Dept实体类和Emp实体类
这简单,根据问题一里面表的列名。直接建立他们的实体类。
Dept类:
package com.po; import java.util.List; public class Dept { private Integer deptno; private String dname; private String loc; private List<Emp> emps; public List<Emp> getEmp() { return emps; } public void setEmp(List<Emp> emp) { this.emps = emps; } public Integer getDeptno() { return deptno; } public void setDeptno(Integer deptno) { this.deptno = deptno; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public String getLoc() { return loc; } public void setLoc(String loc) { this.loc = loc; } @Override public String toString() { return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + ", emp=" + emps + "]"; } }
考虑到第四问是将查询的结果封装到部门Depe的对象中,我们可以知道,这是一对多的关系。
所以加了List来保存多个员工Emp。
Emp类:
package com.po; public class Emp { private int empno; private String ename; private String job; private int mgr; private String hiredate; private int sal; private String comm; private int deptno; public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public int getMgr() { return mgr; } public void setMgr(int mgr) { this.mgr = mgr; } public String getHiredate() { return hiredate; } public void setHiredate(String hiredate) { this.hiredate = hiredate; } public int getSal() { return sal; } public void setSal(int sal) { this.sal = sal; } public String getComm() { return comm; } public void setComm(String comm) { this.comm = comm; } public int getDeptno() { return deptno; } public void setDeptno(int deptno) { this.deptno = deptno; } @Override public String toString() { return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + "]"; } }
第四个问题是:
4、新建EmpMapper接口及相应的Mappe映射文件,使用嵌套结果的方式实现“研发部”所有员工详细信息的查询操作,将查询的结果封装到Dept的对象中。
4.1:新建EmpMapper接口
定义findallemp方法用来实现“研发部”所有员工详细信息的查询操作。
EmpMapper.java:
package com.dao;
import com.po.Dept;
public interface EmpMapper {
public Dept findallemp(String dname);
}
4.2:实现相应的Mappe映射文件并实现接口
EmpMapper.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 namespace="com.dao.EmpMapper"> <!-- 使用嵌套结果的方式实现“研发部”所有员工详细信息的查询操作,将查询的结果封装到Dept的对象中 --> <!-- 嵌套结果 --> <select id="findallemp" parameterType="String" resultMap="allemp"> select * from emp,dept where dept.dname=#{dname} and emp.deptno = dept.deptno </select> <resultMap type="Dept" id="allemp"> <!-- 用于标识那个列是主键 --> <id property="deptno" column="deptno"/> <result property="dname" column="dname"/> <result property="loc" column="loc"/> <collection property="emps" ofType="Emp" > <id property="empno" column="empno"/> <result property="ename" column="ename"/> <result property="job" column="job"/> <result property="mgr" column="mgr"/> <result property="hiredate" column="hiredate"/> <result property="sal" column="sal"/> <result property="comm" column="comm"/> <result property="deptno" column="deptno"/> </collection> </resultMap> </mapper>
这里说一下mapper namespace="com.dao.EmpMapper"是引入并实现上一步的接口文件。
采用嵌套结果的方式进行查询,select是查询的方法。
collection是标识对应的列名。
第五个问题是:
5、编写测试类,使用单元测试完成测试。
test.java:
package com.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.dao.EmpMapper; import com.po.Dept; public class test { @Test public void findallemp() throws Exception{ ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml"); // EmpMapper EmpMapper = (com.dao.EmpMapper) act.getBean("EmpMapper"); EmpMapper EmpMapper = act.getBean(EmpMapper.class); Dept dept = EmpMapper.findallemp("研发部"); System.out.println(dept); } }
运行结果:
在编写代码时,遇到最多的问题就是配置文件的问题。
路径一定要配置好,这里给出我的目录结构。
那就这样了,如果有错误的地方,欢迎指正!
如果需要程序源码,可以私信我发给你。
期待你的点赞关注!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。