一、题
1. 按照如下表结构创建数据库 mydb 及停车场车辆管理表car ( 15 分)数据及表的创建,参考如下:( 10 分)![]()
测试数据如下:(5分)
2.完成spring框架和mybatis框架的整合(15分)
使用xml配置或者注解方式完成框架的整合配置
3. 使用 spring 框架整合 mybatis 完成表的增删改查操作( 50 分)1 )完成所有车辆信息的查询;( 15 分)2 )完成车辆信息的新增;( 15 分)3 )完成车辆信息删除;( 10 分)4 )完成车辆信息的修改;( 10 分)4. 使用 AOP 完成功能增强( 20 分)1 )使用 AOP 完成查询功能的后置日志输出;( 10 分)2 )使用 AOP 完成增删改的前置权限验证;( 10 分)
二、准备工作:
创建如下数据库:
drop table if exists car;
create table car (
cid int(11) primary key not null AUTO_INCREMENT,
cnumber varchar(20),
type varchar(20),
owner varchar(20),
phone varchar(11),
mark varchar(50)
);
insert into car values (1, '豫A34G87', '轿车', '王文琦', '13895647594','临时车');
insert into car values (2, '豫B38379', 'SUV', '张玉梅', '13687594623','月卡');
insert into car values (3, '豫CR9703', '卡车', '刘兆鹏', '13975462146','年卡');
select * from car;
创建如下所示项目结构:
三、实操
1 创建bean
创建一个model包并在其下创建一个Car.java文件。
public class Car {
private Integer cid;
private String cnumber;
private String type;
private String owner;
private String phone;
private String mark;
2 创建DAO接口
创建一个包dao,并在其下创建一个CarrDao.java文件作为DAO接口。
package com.su.dao;
import com.su.bean.Car;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CarDao {
//添加
@Insert("insert into car(cnumber,type,owner,phone,mark) values(#{cnumber},#{type},#{owner},#{phone},#{mark})")
int add(Car car);
//修改
@Update("update car set cnumber=#{cnumber},type=#{type},owner=#{owner},phone=#{phone},mark=#{mark} where cid=#{cid}")
int update(Car car);
//删除
@Delete("delete from car where cid=#{cid}")
int delete(int cid);
//查询
@Select("select * from car")
List<Car> selectAll();
}
3 创建CarService接口
创建一个包service,并在其下创建一个CarService.java文件作为service接口。
package com.su.service;
import com.su.bean.Car;
import java.util.List;
public interface CarService {
//查询
List<Car> findAll();
//添加
int add(Car car);
//修改
int update(Car car);
//删除
int delete(int cid);
}
4 实现CarService接口
在service包下创建一个CarServiceImpl.xml文件作为上一步创建的CarService接口的实现
package com.su.service.impl;
import com.su.bean.Car;
import com.su.dao.CarDao;
import com.su.service.CarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CarServiceImpl implements CarService {
@Autowired
CarDao carDao;
@Override
public List<Car> findAll() {
return carDao.selectAll();
}
@Override
public int add(Car car) {
return carDao.add(car);
}
@Override
public int update(Car car) {
return carDao.update(car);
}
@Override
public int delete(int cid) {
return carDao.delete(cid);
}
}
5 创建MyBatis的配置文件
在src下创建一个mybatis.xml文件,由于我们的数据源部分是要交给Spring管理,所以此处的配置文件只包含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>
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
</configuration>
6 创建jdbc.properties和log4j.properties外部文件
jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mysql
jdbc.user=root
jdbc.password=root
log4j.properties
log4j.rootLogger=TRACE,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=wocao.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
log4j.logger.mapperNS =TRACE
log4j.logger.com.mybatis=DEBUG
log4j.logger.com.mybatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.mybatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.org.springframework=error
log4j.logger.org.apache=ERROR
log4j.logger.org.mybatis=DEBUG
7 在Spring中配置数据源
在src下创建一个spring.xml文件作为Spring的配置文
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--扫描器扫描-->
<context:component-scan base-package="com.su"/>
<!--引入外部文件-->
<context:property-placeholder location="jdbc.properties"/>
<!--1.加载外部配置文件-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--2.配置mybatis的SqlssionFactory,自动获得核心对象Sqlsession对象,可以自动装配mapper接口的代理对象-->
<bean id="factoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="mybatis.xml"/>
<property name="typeAliasesPackage" value="com.su.bean"/>
</bean>
<!--3.配置mapper映射器,告诉mybatis要创建那些接口的代理对象-->
<bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.su.dao"/>
</bean>
<aop:aspectj-autoproxy/>
</beans>
8 创建advice增强类,使用AOP完成查询功能的后置日志输出。使用AOP完成增删改的前置权限验。
package com.su.advice;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
//增强类Advice
@Component
@Aspect
public class Advice {
@Before("execution(int com.su.service.impl.*.*(..))")
public void select() {
System.out.println("前置权限验证.....");
}
@AfterReturning("execution(* com.su.service.impl.*.findAll())")
public void after() {
System.out.println("后置日志输出.....");
}
}
9 测试
在src下创建一个servlet包,并在其下创建一个test01.java文件
package com.su.servlet;
import com.su.bean.Car;
import com.su.service.CarService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class Test01 {
CarService carService;
// 全查
@Test
public void findAllTest() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
carService = context.getBean(CarService.class);
List<Car> carList = carService.findAll();
for (Car car : carList) {
System.out.println(car);
}
}
// 添加
@Test
public void addTest() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
carService = context.getBean(CarService.class);
Car car = new Car();
car.setCnumber("豫P15445");
car.setType("越野车");
car.setOwner("赵四");
car.setPhone("12345678451");
car.setMark("月卡");
int n = carService.add(car);
if (n > 0) {
System.out.println("添加成功!");
}else {
System.out.println("添加失败!");
}
}
// 删除
@Test
public void deleteTest() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
carService = context.getBean(CarService.class);
int n = carService.delete(2);
if (n > 0) {
System.out.println("删除成功!");
}else {
System.out.println("删除失败!");
}
}
// 修改
@Test
public void updateTest() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
carService = context.getBean(CarService.class);
Car car = new Car();
car.setCid(5);
car.setCnumber("豫P15445");
car.setType("越野车");
car.setOwner("张三");
car.setPhone("12345678451");
car.setMark("年卡");
int n = carService.update(car);
if (n > 0) {
System.out.println("修改成功!");
}else{
System.out.println("修改失败!");
}
}
}
10 运行结果展示(查询功能的后置日志输出,增删改的前置权限验)
全查
添加
修改
删除