common:公有的代码,需要多次使用的部分,实现高内聚低耦合
controller:前后台数据交互,数据从controller中交给各个业务模块(service)中
mapper:数据库的业务模块(sql语句),对数据库进行操作的
model:映射数据库各个表中的各个字段和业务字段(不在数据库里客户需要的放在这里或者VO里跟model有继承关系)的实体
service:业务模块接口
serviceImpl:业务模块接口的实现类,实现业务(简单的工厂模式)
util:工具类
二、util里放置的自定义工具 DataSource.javapackage com.demo.util;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DataSource {
String value();
}
DynamicDataSource.java
package com.demo.util;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
// 从自定义的位置获取数据源标识
return DynamicDataSourceHolder.getDataSource();
}
}
DynamicDataSourceHolder.java
package com.demo.util;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
public class DynamicDataSourceHolder {
private static final ThreadLocal THREAD_DATA_SOURCE = new ThreadLocal();
public static String getDataSource() {
return THREAD_DATA_SOURCE.get();
}
public static void setDataSource(String dataSource) {
THREAD_DATA_SOURCE.set(dataSource);
}
public static void clearDataSource() {
THREAD_DATA_SOURCE.remove();
}
}
三、功能搭建
1.实体的创建
按照数据库表中属性,然后有参无参构造、setget方法、重写tostring,直接用软件创建即可。
之前我的java的初级文章有写,不再重复,可以去翻一下。
2.在mapper里新建一个xml如果此步没有mapper可以在这两个网址之一学习如何进行引入 :
eclipse 创建mybatis-config.xml 创建mapper.xml文件 | 蓝蓝博客
eclipse 创建mybatis-config.xml、mapper.xml文件 【mybatis入门】 - 灰信网(软件开发博客聚合)
然后直接选finish,完成。
3.mapper里代码书写企业内书写代码的注意事项:sql里尽量不要使用*通配符!
原因:
1.为了安全,防止黑客使用sql注入的方式来攻击。
2.为了程序能够最大速度运行。
mapper里结构 StuMapper.xmlStuMapper.java(一个接口)select no,name,sex,age,notes from stu
package com.demo.mapper;
import java.util.List;
import com.demo.model.Student;
public interface StuMapper {
public List findall();//注意此处方法名和xml里的select的id名字保持一致
//若对应的xml里没有返回结果类型resultTy,此处也不要有返回类型
}
4.service和serviceImpl文件夹
StuService.java
package com.demo.service;
import java.util.List;
import com.demo.model.Student;
public interface StuService {
public List findall();//和mapper里对应的接口保持一致
}
StuServiceImpl.java
package com.demo.serviceImpl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.demo.mapper.StuMapper;
import com.demo.model.Student;
import com.demo.service.StuService;
@Service//注解
public class StuServiceImpl implements StuService{
@Autowired//注入相当于实例化
private StuMapper mapper;//相当于容器=实例化,利用框架的功能
@Override
public List findall() {
return mapper.findall();
}
}
5.controller文件夹
StuController.java
package com.demo.controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.demo.model.Student;
import com.demo.service.StuService;
@Controller
public class StuController {
@Autowired
private StuService service;
@RequestMapping(value = "stu_findall")//调用,value里的名字自起,为了方便记忆可以用数据库表名_功能
public String stu_findall(HttpServletRequest request){//不一定等于上面的名字,但方便记忆
List list = service.findall();
//体现
request.setAttribute("list", list);//发送到响应界面中
return "stu_findall";//不用加.jsp因为已经过滤掉了
}
}
6.界面按照配置文件放在 WEB-INF -> pages 下
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
view
| 编号: | 姓名: | 性别: | 年龄: | 备注: |
|---|---|---|---|---|
| ${it.no } | ${it.name } | ${it.sex } | ${it.age } | ${it.notes } |
http://localhost:8080/cc_javaMax_demo/stu_findall.action
运行成功!
(.action前的从controller里的@RequestMapping(value = "stu_findall")里取)



