才开始接触mybaties 甚是尴尬,很简单的东西都不会做。
一、对象的查询
问题:一个类中存在一个对象,需要进行查询所有数据,查询查不出来对象的属性。需要在关联查询对象属性的字段。
代码如下:
bean:
/**
* Copyright © 2012-2016 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
*/
package com.thinkgem.jeesite.modules.kaoqin.workyears.entity;
import com.thinkgem.jeesite.modules.sys.entity.User;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.hibernate.validator.constraints.Length;
import com.thinkgem.jeesite.common.persistence.DataEntity;
/**
* 工龄表Entity
* @author xl
* @version 2018-10-17
*/
public class TscUserYear extends DataEntity<TscUserYear> {
private static final long serialVersionUID = 1L;
private User user; // 用户
private Date enterCompnyDate; // 加入公司时间
private int workYears; // 工龄
public TscUserYear() {
super();
}
public TscUserYear(String id){
super(id);
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date getEnterCompnyDate() {
return enterCompnyDate;
}
public void setEnterCompnyDate(Date enterCompnyDate) {
this.enterCompnyDate = enterCompnyDate;
}
@Length(min=0, max=3, message="工龄长度必须介于 0 和 3 之间")
public int getWorkYears() {
return workYears;
}
public void setWorkYears(int workYears) {
this.workYears = workYears;
}
}
java:
package com.thinkgem.jeesite.modules.kaoqin.workyears.service;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.thinkgem.jeesite.common.utils.DateUtils;
import com.thinkgem.jeesite.modules.kaoqin.workyears.dao.TscUserYearDao;
import com.thinkgem.jeesite.modules.kaoqin.workyears.entity.TscUserYear;
import com.thinkgem.jeesite.modules.sys.entity.User;
/**
* 轮询时间设置工龄信息
*/
public class WorkYearsTimerTaskQuartz {
private static long DATETIME = 1000 * 60 * 60 * 24 ;
private static Logger logger = LoggerFactory.getLogger(WorkYearsTimerTaskQuartz.class);
@Autowired
private TscUserYearDao userYearsDao;
public void run(){
List<TscUserYear> list= userYearsDao.findAllList();
Date currDate = new Date();
for (TscUserYear userYear : list) {
String u = userYear.getUser().getName();
Date enterDate = userYear.getEnterCompnyDate();
long workTime = DateUtils.dateToLong(currDate) - DateUtils.dateToLong(enterDate);
userYear.setWorkYears(workYear(workTime));
// userYear.setUser(u);
userYearsDao.update(userYear);
logger.debug(userYear.getUser().getName() + "已经工作了" + workYear(workTime) + "年了,数据更新成功!");
}
}
private int workYear(long workTime){
long date = workTime/(DATETIME);
int work = (int) (date / 365);
return work;
}
}
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.thinkgem.jeesite.modules.kaoqin.workyears.dao.TscUserYearDao">
<sql id="tscUserYearColumns">
a.id AS "id",
a.user_id AS "user",
a.enter_compny_date AS "enterCompnyDate",
a.work_years AS "workYears",
u2.name AS "user.name",
u2.id AS "user.id"
</sql>
<sql id="tscUserYearJoins">
LEFT JOIN sys_user u2 ON u2.id = a.user_id
</sql>
<select id="get" resultType="TscUserYear">
SELECT
<include refid="tscUserYearColumns"/>
FROM tsc_user_year a
<include refid="tscUserYearJoins"/>
WHERE a.id = #{id}
</select>
<select id="findList" resultType="TscUserYear">
SELECT
<include refid="tscUserYearColumns"/>
FROM tsc_user_year a
<include refid="tscUserYearJoins"/>
<where>
1 = 1
<if test="user != null and user!='' ">
and a.user_id = #{user.id}
</if>
</where>
<choose>
<when test="page !=null and page.orderBy != null and page.orderBy != ''">
ORDER BY ${page.orderBy}
</when>
<otherwise>
</otherwise>
</choose>
</select>
<select id="findAllList" resultType="TscUserYear">
SELECT
<include refid="tscUserYearColumns"/>
FROM tsc_user_year a
<include refid="tscUserYearJoins"/>
<where>
</where>
<choose>
<when test="page !=null and page.orderBy != null and page.orderBy != ''">
ORDER BY ${page.orderBy}
</when>
<otherwise>
</otherwise>
</choose>
</select>
<insert id="insert">
INSERT INTO tsc_user_year(
id,
user_id,
enter_compny_date,
work_years
) VALUES (
#{id},
#{user.id},
#{enterCompnyDate},
#{workYears}
)
</insert>
<update id="update">
UPDATE tsc_user_year SET
user_id = #{user.id},
enter_compny_date = #{enterCompnyDate},
work_years = #{workYears}
WHERE id = #{id}
</update>
<update id="delete">
DELETE FROM tsc_user_year
WHERE id = #{id}
</update>
</mapper>