一、数据库创建:
1.设计好每一张实体表,关联表,确定字段是否非空,是否需要建立唯一索引
2.lastModifiedTime字段设置注意:需要设置为
自动更新为当前时间
ALTER TABLE `t_training_course`
MODIFY COLUMN `last_modified_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间'
二、实体创建(Class):
1.一个表(包括关联表)对应一个实体,其目的是方便对数据库进行增删改查;
(1)类中变量定义时
类型必须是类;service用简单类型;容器中一般用类类型List<Integer>防止其不能接收null对象;
(2)类注解:@Entity @Table(name = "数据库表名");
(3)变量注解:@Id 变量名称需要与数据库中名称对应 @Column(name = "last_modified_time");
(4)对象序列化问题:private static final long serialVersionUID = -6411614473004852343L;(序列号自动生成);
(5)Alt+Insert 添加get set方法;
三、DTO创建( Class):
1.Dto用于方便界面显示几张表(关联表中关联的表)中的数据时直接将数据从数据库中联表查询出来存到Dto类型的容器中即可
(1)此类不需要类注解;
(2)变量类型为类类型;
(3)Id变量:不需要注解,最好定义一个其他的名称(如sId)查询出关联表的Id与其对应;如果不取别名sId可能会出现查询出的Dto的Id 值为空的情况;
(4)其余变量注解:与类实体相同, @Column(name = "对应数据库中的对应字段");
四、Mapper.java 创建(interface):
1.主要是定义一些与mapper.xml对应的查询方法,抛出异常Exception
五、Mapper.xml 创建:
1.文件头部分定义内容(编码+mybatis的引用吧);
<?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">
2.在其中添加SQL语句
<mapper namespace= "com.quality.mapper.PrinterMapper"> ----此处对应相关的Mapper文件位置
sql查询语句·········
</mapper>
<?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">
2.在其中添加SQL语句
<mapper namespace= "com.quality.mapper.PrinterMapper"> ----此处对应相关的Mapper文件位置
sql查询语句·········
</mapper>
六、SQL语句使用:
注意(1)
只有有对应实体类才能resultMap="pw.Printer" (2)
否则resultType="int" (3)
删除更新没有返回值
1.根据传入的关键字排序(排序时接受变量时:#{} `${}`使用区别(程序中使用前者排序不生效)):
<select id="listByPage" resultMap="pw.Printer">
SELECT * FROM `t_quality_printer`
ORDER BY `${orderName}`
<if test="type==0">
DESC
</if>
limit #{offset}, #{size}
</select>
2.子表查询: 根据关联中的字段值查询出 一个id值 再根据其id值查询出另外一个表中的数据
<select id="queryPrinterByPartyId" resultMap="pw.Printer">
SELECT printer.* FROM t_quality_printer printer, t_quality_printer_group g
WHERE printer.id = g.`printer_id` AND g.`party_id` = #{partyId}
</select>
3.删除:根据ID删除一个表中的数据以及其关联表中与其相关的数据
<delete id="delUserAndPrinterByPrinterId">
DELETE t_quality_printer,t_quality_printer_group
FROM t_quality_printer
LEFT JOIN t_quality_printer_group ON t_quality_printer.id = t_quality_printer_group.printer_id
WHERE t_quality_printer.id = #{id}
</delete>
4.更新数据库表信息
<update id="updatePrinter">
UPDATE `t_quality_printer` SET
`code` = #{code},
`ip` = #{ip},
`desc` = #{desc}
WHERE `id` = #{id}
</update>
5.根据条件查询数据量
<select id="countIpIsExist" resultType="int">
SELECT COUNT(1) FROM t_quality_printer
WHERE `ip` = #{ips}
</select>
6.联表查询
<select id="listPartyByPrinterId" resultType="PrinterGroupDTO">
SELECT t_quality_printer_group.id AS sid,
t_quality_printer_group.printer_id AS printerId,
t_quality_printer_group.party_id AS partyId,
t_party_group.party_name AS partyName,
t_party_group.english_name AS englishName,
t_party_group.`desc` AS descOfParty
FROM t_quality_printer_group
LEFT JOIN t_party_group ON t_quality_printer_group.party_id = t_party_group.party_id
WHERE t_quality_printer_group.printer_id = #{printerId}
</select>
七、Service实现
1、service接口定义(
interface):定义一些逻辑接口
throws SSexception(工作室定义)
2、service接口实现(
class):
(1)在类之前需要 @Service("
printerService")----首字母小写(即使类名大写);
(2)选中类名Alt+Enter,选择“Implement merhods”即可添加所有的方法实现体;
(3)使用Mapper或者其他Service时需要注入:
不注入则会导致使用的对象找不到(出现空指针问题,遇到过问题:没有@Qualifier("commonDao")出现空指针错误));
@Autowired
@Qualifier("commonDao")private CommonDao commonDao;@Autowired
private PrinterMapper printerMapper;@Autowired
PrinterGroupService printerGroupService;
(4)对接收的参数进行判断处理(封装工具类):Assert
(5)异常代码规范问题:不要把语句都放在Try语句中(
Controller中不需要抛异常):
a.能预料其会出现异常的代码需要做处理(如:没有目录创建目录);
b.能抛出具体的异常的代码放在try代码外,用throw跑出异常;
c.普通的定义变量等放在try外面;
d.被调用方法已经有trycatch保护,且异常等级比调用者更低(更具体)或者同等级,则该被调用方法不应该放在try里面;
八、Controller与套界面
(1)类注解与权限、请求地址等
@Module(ModuleEnums.Party)---------------权限 ModuleEnums为权限配置(抑或是URL的枚举??)
@RequiresPermissions("Party:Printer")--------权限
@Controller-----------controller必须注解
@RequestMapping("admin/party/printer")--------请求地址
(2)