创建包,配置文件,自定义字符编码过滤器
dao层java下创建包
dao(接口),entity(pojo实体类),global(工具类)
spring-dao.xml dao配置文件
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--spring-dao.xml dao配置文件-->
<!--1.底层Model层配置-->
<!--注解扫描-->
<!--描注解注入bean @commpent @repository @service @controller @autowi red @resource -->
<context:component-scan base-package="cn.com.*"></context:component-scan>
<!--数据源,数据库连接,id数据源名,class引用的类-->
<!--<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:database.properties"></property>
</bean>-->
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/workordermanager?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!--sqlSessionFactoryBean工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--获得数据源-->
<property name="dataSource" ref="myDataSource"></property>
<property name="mapperLocations">
<list>
<value>classpath:cn/com/dao/ProjectMapper.xml</value> <!--SQL映射文件路径-->
</list>
</property>
<!--路径别名pojo,entity-->
<property name="typeAliasesPackage" value="cn.com.entity"></property>
<!--引入mybatis-config.xml(有些只能在Mybatis配置的),如分页查询-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!--Mapper映射器扫描-->
<!--扫描dao接口包,内部自动建立MapperFactoryBean映射器实例-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.com.dao"></property>
<!--匹配工厂(数据源),多个工厂需要手动指定工厂名字-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!--底层Model层配置结束!-->
</beans>
2.biz层(service层)
spring-biz.xml biz配置文件(service层)
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--spring-biz.xml biz配置文件(service层)-->
<!--1.底层Model层配置-->
<!--导入spring-dao.xml dao配置文件-->
<import resource="spring-dao.xml"></import>
<!--注解扫描-->
<!--描注解注入bean @commpent @repository @service @controller @autowi red @resource -->
<context:component-scan base-package="cn.com.*"></context:component-scan>
<!--开启事务注解驱动,及事务管理-->
<!--@transaction (pxopagation="")-->
<tx:annotation-driven proxy-target-class="true" transaction-manager="txManage"></tx:annotation-driven>
<!--AOP自动代理,Aspectj注解SpringAOP需求-->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!--2.biz层,(Service层)配置-->
<!--事务管理器-->
<bean id="txManage" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="myDataSource"/>
</bean>
<!--事务增强规则-->
<tx:advice transaction-manager="txManage" id="txAdvice">
<tx:attributes> <!--通配方法名-->
<tx:method name="get*" read-only="true" propagation="SUPPORTS"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--切面1-->
<aop:config> <!--biz层,(service层)所有的包所有的类监控-->
<aop:pointcut id="pointcut1" expression="execution(* cn.com.biz..*.*(..))"/>
<!--引入切面规则-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
</aop:config>
</beans>
3.web层(Controller层)
java下创建包
controller(控制类),dto(pojo实体类),global(工具类)
spring-web.xml web配置文件(Controller层)
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--spring-web.xml web配置文件(Controller层)-->
<!--1.底层Model层配置-->
<!--2.Service层配置-->
<import resource="spring-biz.xml"></import>
<!--3.Controller层配置-->
<!--静态资源访问,启用默认的Service-->
<mvc:default-servlet-handler />
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property> <!--页面路径-->
<property name="suffix" value=".jsp"></property>
<!--<property name="order" value="10"/>-->
<!--页面后缀-->
</bean>
<!–注解扫描,bean,包名加*通配符–>
<!–拦截器注册–>
<mvc:interceptors>
<!–用户登录拦截器–>
<mvc:interceptor>
<mvc:mapping path="/user/*"></mvc:mapping>
<mvc:exclude-mapping path="/user/updatepwd"></mvc:exclude-mapping>
<bean class="cn.com.inteceptor.LoginInteceptor"></bean>
</mvc:interceptor>
<!–日志拦截器–>
</mvc:interceptors>
<!–pageHelp分页–>
<!– 配置pageHelp的拦截器 –>
<bean id="plugin" class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>helperDialect=mysql</value>
</property>
</bean>
<!--实例化课程类–>-->
<bean id="course1" class="cn.com.pojo.Course">
<property name="name" value="新课1"></property>
<property name="price" value="666.00"></property>
</bean>
<bean id="course2" class="cn.com.pojo.Course"
p:name="新课2" p:price="777.00"></bean>
<bean id="course3" class="cn.com.pojo.Course"
p:id="6" p:name="改课3" p:price="888.00"></bean>
<!--实例化workorder对象,用于添加-->
<!--(#{projectId},#{executor},#{description},#{orderLevel},#{createDate});-->
<!--(1,"李小明","完成在线答疑任务",2,new Date());-->
<!--<bean id="workorder1" class="cn.com.pojo.Workorder"
p:projectId="1" p:executor="刘明" p:description="完成在线答疑任务" p:orderLevel="2" p:createDate="2020-03-04"></bean>-->
</beans>
web.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>Archetype Created Web Application</display-name>
<!--隐藏的方法过滤器-->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<!--中文乱码过滤器-->
<filter>
<filter-name>EncodeFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--隐藏的方法过滤器-->
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--前端控制器上-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--通过前端控制器来读取springmvc-config容器配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-web.xml</param-value>
</init-param>
<!--设置启动优先级-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--前端控制器下-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--默认的读取静态资源文件的servlet-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/assets/*</url-pattern>
<url-pattern>/js/*</url-pattern>
<url-pattern>/vendor/*</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
</web-app>
*自定义编码过滤器
web.xml 配置文件
global包下创建过滤器类
dao下entity创建实体类(toString,构造方法,get/set)
员工表类
//员工表类
public class Employee {
private String sn; //编号
private String password; //密码
private String name; //姓名
private String department_sn; //所属部门
private String post; //职务
dao下dao包创建Mapper接口
//员工表接口
public interface EmployeeMapper {
//查全部
public List<Employee> getAll();
//根据sn查询
public Employee getById(String sn);
//增加员工
public void add(Employee employee);
//修改员工
public void update(Employee employee);
//删除员工(根据sn)
public void delete(String sn);
}
同时dao下resources创建cn.com.dao同名包
创建Mapper.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="cn.com.dao.EmployeeMapper"> <!--本映射器文件路径-->
<!--员工SQL映射文件-->
<!--查全部-->
<select id="getAll" resultType="Employee">
SELECT * FROM `employee`;
</select>
<!--根据sn查询-->
<select id="getById" parameterType="String" resultType="Employee">
SELECT * FROM `employee` WHERE sn=#{sn};
</select>
<!--添加员工-->
<insert id="add" parameterType="Employee">
INSERT INTO `employee` (sn,password,name,department_sn,post) VALUES (#{sn},#{password},#{name},#{department_sn},#{post});
</insert>
<!--修改员工-->
<update id="update" parameterType="Employee">
UPDATE `employee` SET sn=#{sn},password=#{password},name=#{name},department_sn=#{department_sn},post=#{post} WHERE sn = #{sn};
</update>
<!--删除员工-->
<delete id="delete" parameterType="String">
DELETE FROM `employee` WHERE sn = #{sn};
</delete>
</mapper>
biz(Service)下的biz包创建Service接口dao实现类
//员工接口实现类
@Service
public class EmployeeService implements EmployeeMapper {
//注入dao层接口
@Autowired
private EmployeeMapper employeeMapper;
//查全部
public List<Employee> getAll() {
return employeeMapper.getAll();
}
//根据sn查询
public Employee getById(String sn) {
return employeeMapper.getById(sn);
}
//添加
public void add(Employee employee) {
employeeMapper.add(employee);
}
//修改
public void update(Employee employee) {
employeeMapper.update(employee);
}
//删除
public void delete(String sn) {
employeeMapper.delete(sn);
}
}
web下的test包创建Service层测试类
//Service层测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-web.xml")
public class TestService {
private Logger logger = Logger.getLogger(TestService.class);
//注入部门表Service层接口实现类
@Resource(name = "departmentService")
private DepartmentService departmentService;
//查询部门表
@Test
public void getAllDepartment(){
List<Department> departments = departmentService.getAll();
logger.info("部门信息查询如下:");
for(Department d:departments){
logger.info(d.toString());
}
}
//注入员工表Service层接口实现类
@Resource(name = "employeeService")
private EmployeeService employeeService;
//查询员工表
@Test
public void getAllEmployee(){
List<Employee> employees = employeeService.getAll();
logger.info("员工信息查询如下:");
for(Employee e:employees){
logger.info(e.toString());
}
}
//根据sn查询员工
@Test
public void getById(){
Employee employee = employeeService.getById("10004");
logger.info("全部员工信息查询如下:");
logger.info(employee.toString());
}
//添加员工信息
//导入Spring容器实例
@Resource(name = "employee1")
private Employee employee1;
@Resource(name = "employee2")
private Employee employee2;
@Test
public void add(){
employeeService.add(employee1);
getAllDepartment();
logger.info("添加一条员工信息成功!");
getAllEmployee();
}
//修改员工信息
@Test
public void update(){
Employee employee02 = new Employee("10005","123123","万茜","10003","员工");
employee02.setSn("10005");
employeeService.update(employee02);
logger.info("修改员工信息成功!");
getAllEmployee();
}
//删除一条员工信息
@Test
public void delete(){
employeeService.delete("10005");
logger.info("删除一条员工信息成功!");
getAllEmployee();
}
}
spring-web.xml 实例化对象用于添加数据(依赖实体类无参构造方法)
<!--实例化第一个员工对象-->
<bean id="employee1" class="cn.com.entity.Employee" p:sn="10005" p:password="123123" p:name="孙红雷" p:department_sn="10003" p:post="员工"></bean>
<!--实例化第二个个员工对象-->
<bean id="employee2" class="cn.com.entity.Employee" p:sn="10005" p:password="123123" p:name="张鲁一" p:department_sn="10003" p:post="员工"></bean>
web下创建Controller控制类
进入添加修改页面方法,增删改查方法
项目控制类
//员工表控制类
@Controller
@RequestMapping("/employee")
public class EmployeeController {
//注入Service层接口实现类
@Resource(name = "employeeService")
private EmployeeService employeeService;
//注入Service层部门接口实现类
@Resource(name = "departmentService")
private DepartmentService departmentService;
/* @RequestMapping(value = "/show")
public String show() {
System.out.println("进入Controller,show访问页面的映射,浏览器访问方法!");
return "redirect:/employee/getAllModel"; //JSP页面
}*/
//1.查询员工信息
//普通表单
//使用ModelAndView的,JSP
@RequestMapping(value = "/getAllModel")
public ModelAndView getAllModel(){
System.out.println("进入Controller,ModelAndView查询查询员工信息方法!");
//查询集合,调用Service层方法
List<Employee> employees = employeeService.getAll();
ModelAndView modelAndView = new ModelAndView();
//添加model数据
modelAndView.addObject("employees",employees);
//添加逻辑视图名,自动找页面
modelAndView.setViewName("employee_list");
System.out.println("封装完成! return modelAndView");
return modelAndView;
//进入JSP前端页面
}
//2.添加员工信息
//SpringMVC的form表单
//进入添加页面
@RequestMapping(value = "/to_add")
public String to_add(Map<String,Object> map){
System.out.println("进入Controller,to_add访问页面的映射,浏览器访问方法!");
map.put("employee",new Employee());
//封装部门信息
map.put("department",departmentService.getAll());
//添加静态常量类的数据
map.put("post", Contant.getPosts());
return "employee_add"; //JSP页面
}
//添加员工
@RequestMapping(value = "/insert")
public String add(Employee employee) {
System.out.println("进入Controller控制器,add方法,添加员工方法!");
//执行添加工单
employeeService.insert(employee);
//返回到下面输出页面方法
return "redirect:/employee/getAllModel";
}
//修改员工信息
//SpringMVC的form表单
//进入修改页面
@RequestMapping(value = "/to_update")
public String to_update(Map<String,Object> map, @RequestParam("sn") String sn){
System.out.println("进入Controller,to_update访问页面的映射,浏览器访问方法!");
map.put("employee",employeeService.getById(sn));
//添加部门信息
map.put("department",departmentService.getAll());
//添加静态常量类的数据
map.put("post", Contant.getPosts());
return "employee_update"; //JSP页面
}
//修改员工
@RequestMapping(value = "/update",params = "sn")
public String update(Employee employee) {
System.out.println("进入Controller控制器,update方法,编辑员工方法!");
//执行添加工单
employeeService.update(employee);
//返回到下面输出页面方法
return "redirect:/employee/getAllModel";
}
//删除员工信息
@RequestMapping(value = "/delete/{sn}")
public String delete(@PathVariable("sn") String sn) {
System.out.println("进入Controller控制器,delete方法,删除员工方法!");
//执行添加工单
employeeService.delete(sn);
//返回到下面输出页面方法
return "redirect:/employee/getAllModel";
}
}