MyBatis consultas relacionadas, relacionadas con cómo dos tablas o tres tablas o más tablas que? (Use la etiqueta de asociación)

        MyBatis consultas relacionadas. No es difícil, no se preocupe, aunque no puedo hacer esto es bastante pánico, Dime lo que el blog de la red para ver todo tipo de investigación, y más tarde se descubrió bastante simple. Sin embargo, el descubrimiento y QueryRunner en comparación con este último no es fácil, pero este último sólo se puede utilizar en un JSP, no se pueden utilizar en la página HTML, relativamente sin sabor.

        Mybatis consulta de tabla específica, incluso cómo usarlo, me sigue, paso a paso:

        1. Requisitos: Debido a que hago es la revisión de documentos se requiere interfaz (lista B de nombres de archivo, la tabla B tiempo de carga, la tabla C de tipos de archivo, una tabla de estado)  cuatro campos, tres tabla asociada, mi hacer consultas dinámicas borde primero, y luego terminando detrás vacía, no hizo uso de marcos como la primavera, por lo que algunos de los más antiguos de escritura.

        Solía ​​escribir negocio desde la última página está escrita, la última página ir directamente a ajustar.

        2.bean,

        3.FileCheckInfoMapper Interface (equivalente a las interfaces Dao anteriores),

        4.FileCheckInfoMapper.xml (clase de implementación correspondiente a DAO),

        5. Configurar parámetros de clase de aplicación FileCheckInfoMapper.xml en el archivo de configuración de la conexión de base de datos de configuración,

        interfaz de capa de servicio 6.FileCheckInfoService,

        7.FileCheckInfoServiceImpl clase de implementación de la capa de servicio,

        8.FileCheckInfoServlet para sintonizar la capa de servicios, devuelve los datos a HTML,

        9. El registro FileCheckInfoServlet en web.xml

        10. PAGE para acceder al servlet, los datos de impresión,

        11. Los datos de puntada en la página, no escribo este paso, porque no lo hice.

      (¿Quién me gustaría tan entusiasta, la mayoría de la gente no lo ocultan, me siento bien, un punto como ah)

1. Requisitos: la (tabla B necesidad de nombre de archivo, B tabla de tiempo de subida, C tabla de tipos de archivo, una tabla de estado)  estos cuatro campos

2. edificio engorroso poco de frijol, no sabe que no puede llegar a detrás de un método relativamente simple (utilizando QueryRunner con el mapa que hacer, que es relativamente sencillo, por lo que nunca olvido)

frijol debe recibir todo el conjunto y, los tres primeros frijol está por encima de tres tablas, una judía es para durar tres mesas.

public class FileCheck {
	private Long fcId;
	private Long fileId;
	private Long checkState;
	private Date checkCtime;
	private Long adminId;

	public FileCheck(Long fcId, Long fileId, Long checkState, Date checkCtime, Long adminId) {
		super();
		this.fcId = fcId;
		this.fileId = fileId;
		this.checkState = checkState;
		this.checkCtime = checkCtime;
		this.adminId = adminId;
	}

}
public class FileInfo {
	private Long fileId;
	private String fileName;
	private Date upCtime;
	private Long fileState;
	private Long typeId;
	private Long userId;
	private Long adminId;
	private String md5Code;
	private Long fileSize;
	private String savePath;
	private Long fileScore;

	public FileInfo(Long fileId, String fileName, Date upCtime, Long fileState, Long typeId, Long userId, Long adminId,
			String md5Code, Long fileSize, String savePath, Long fileScore) {
		super();
		this.fileId = fileId;
		this.fileName = fileName;
		this.upCtime = upCtime;
		this.fileState = fileState;
		this.typeId = typeId;
		this.userId = userId;
		this.adminId = adminId;
		this.md5Code = md5Code;
		this.fileSize = fileSize;
		this.savePath = savePath;
		this.fileScore = fileScore;
	}

}
public class FileType {
	private Long ftId;
	private String typeName;
	private String tailName;
	private Long typeScore;
	private Date typeCtime;

	public FileType(Long ftId, String typeName, String tailName, Long typeScore, Date typeCtime) {
		super();
		this.ftId = ftId;
		this.typeName = typeName;
		this.tailName = tailName;
		this.typeScore = typeScore;
		this.typeCtime = typeCtime;
	}

}

Incluso el grano de consulta de tabla requerida: explicar, a fin de no leer

public class FileCheckInfo {//文件审核界面三表连表查询:文件审查表+文件信息表+文件类型表
	private Long fcId;
	private Long fileId;
	private Long checkState;
	private Date checkCtime;
	private Long adminId;
	private FileInfo fileInfo;
	private FileType fileType;
		
	public FileCheckInfo(Long fcId, Long fileId, Long checkState, Date checkCtime, Long adminId) {
		super();
		this.fcId = fcId;
		this.fileId = fileId;
		this.checkState = checkState;
		this.checkCtime = checkCtime;
		this.adminId = adminId;
	}

}

 

3.FileCheckInfoMapper Interfaz:

Por encima al paquete anterior y ahora está por debajo del nombre del paquete

public interface FileCheckInfoMapper {
   List<FileCheckInfo> selectFileCheckList();//前面不需要加public,因为自动会有
}

4.FileCheckInfoMapper.xml (clase de implementación DAO equivalente): explicar, a fin de no leer

<?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.zcy.mapper.FileCheckInfoMapper">
	<resultMap type="com.zcy.bean.FileCheckInfo" id="FileCheckInfoMap">
		<id column="FC_ID" property="fcId" />
		<result column="FILE_ID" property="fileId" />
		<result column="CHECK_STATE" property="checkState" />
		<result column="CHECK_CTIME" property="checkCtime" />
		<result column="ADMIN_ID" property="adminId" />
		<association property="fileInfo" javaType="com.zcy.bean.FileInfo">
			<id column="FILE_ID" property="fileId" />
			<result column="FILE_NAME" property="fileName" />
			<result column="UP_CTIME" property="upCtime" />
			<result column="FILE_STATE" property="fileState" />
			<result column="TYPE_ID" property="typeId" />
			<result column="USER_ID" property="userId" />
			<result column="ADMIN_ID" property="adminId" />
			<result column="MD5_CODE" property="md5Code" />
			<result column="FILE_SIZE" property="fileSize" />
			<result column="SAVE_PATH" property="savePath" />
			<result column="FILE_SCORE" property="fileScore" />
		</association>
		<association property="fileType" javaType="com.zcy.bean.FileType">
			<id column="FT_ID" property="ftId" />
			<result column="TYPE_NAME" property="typeName" />
			<result column="TAIL_NAME" property="tailName" />
			<result column="TYPE_SCORE" property="typeScore" />
			<result column="TYPE_CTIME" property="typeCtime" />
		</association>
	</resultMap>
	<select id="selectFileCheckList" resultMap="FileCheckInfoMap">
	 select
	  a.fc_id,b.file_name,b.up_ctime,c.type_name,a.check_state
	  from file_check_info a
      left join file_info b on a.file_id=b.file_id
      left join file_type c on c.ft_id=b.type_id
	</select>
</mapper>  

  5. Configuración de los parámetros de configuración de conexión de base de datos en la clase de implementación FileCheckInfoMapper.xml archivo de configuración, si no está escrito en el código XML, entonces no está configurado aquí, se quejan, he conocido antes, habría mencionado.

<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
        <property name="username" value="ZCY"/>
        <property name="password" value="ZCY"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
     <!-- 文件审核(连表查询)实现类  -->
    <mapper resource="com/zcy/mapper/FileCheckInfoMapper.xml"/> 
  </mappers>
</configuration>

Siguiente es simple:

6.FileCheckInfoService interfaz de capa de servicio:

public interface FileCheckInfoService {
	//查询所有的文件审核
	List<FileCheckInfo> selectFileCheckList();
}

7.FileCheckInfoServiceImpl clase de servicio implementación de la capa:

public class FileCheckInfoServiceImpl implements FileCheckInfoService {

	@Override
	public List<FileCheckInfo> selectFileCheckList() {
		SqlSession session= SqlSessionUtil.getSqlSession();
		FileCheckInfoMapper mapper=session.getMapper(FileCheckInfoMapper.class);
		List<FileCheckInfo> fileCheckInfo=mapper.selectFileCheckList();
		session.close();
		return fileCheckInfo;
	}

}

8.FileCheckInfoServlet para sintonizar la capa de servicios, devolver los datos a HTML:

JSonMessage aquí define una clase, la colección devuelta es de tipo HashMap, GET, y no se olvide de conjunto

public class JsonMessage {
	private int id;
	private String msg;
	private String location;
	private Map<String, Object> dataList = new HashMap<String, Object>();

	public JsonMessage(int id, String msg, String location, Map<String, Object> dataList) {
		super();
		this.id = id;
		this.msg = msg;
		this.location = location;
		this.dataList = dataList;
	}

	public JsonMessage() {
		super();
	}

}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		FileCheckInfoServiceImpl impl=new FileCheckInfoServiceImpl();
		List<FileCheckInfo> fileCheck=impl.selectFileCheckList();
		JsonMessage msg=new JsonMessage();
                //HashMap
		msg.getDataList().put("fileCheck", fileCheck);
		response.getWriter().println(JSONObject.toJSONString(msg));	
	}

9. El FileCheckInfoServlet registrado en web.xml:

 <!-- 文件审核(连表查询) -->
  <servlet>
    <servlet-name>fileCheckInfo</servlet-name>
    <servlet-class>com.zcy.servlet.FileCheckInfoServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>fileCheckInfo</servlet-name>
    <url-pattern>/fileCheckInfo.act</url-pattern>
  </servlet-mapping>

10. PAGE para acceder al servlet, imprimir datos, escritos en relativamente simple:

<script type="text/javascript">
	function initFileCheck() {//文档审核表
		$.ajax({
			url : "fileCheckInfo.act",
			type : "post",
			dataType : "JSON",
			success : function(data) {
				console.log(data);
			},
			error : function(data) {
				alert("请联系管理员!");
			}
		})
	}
	initFileCheck();
</script>

11. Los datos de puntada en la página, no escribo este paso, porque no lo hice.

12. No esperaba estar escribiendo este blog durante tanto tiempo, sentirse útil para darme algunos elogios Oh, no se toma de la luz Oh!

Publicados 163 artículos originales · ganado elogios 92 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_42995083/article/details/105334583
Recomendado
Clasificación