Directorio de artículos
El proxy DAO implementa operaciones de base de datos
El proxy DAO implementa operaciones de base de datos
1. Eliminar la clase de implementación de la interfaz Dao
2. getMapper obtiene el objeto proxy
Simplemente llame al método getMapper() de SqlSession para obtener el objeto de clase de implementación de la interfaz especificada. El parámetro de este método es el valor de clase de la clase de interfaz Dao especificada.
SqlSession session = factory.openSession();
StudentDao dao = session.getMapper(StudentDao.class);
Usar herramientas
StudentDao studentDao =
MyBatisUtil.getSqlSession().getMapper(StudentDao.class);
El objeto creado por getMapper() es la clase StudentDaoImpl que creamos en lugar de nosotros mismos
3. Use el método de objeto de proxy Dao para ejecutar la instrucción sql
seleccione el método para consultar
@Test
public void testSelect() throws IOException {
final List<Student> studentList = studentDao.selectStudents();
studentList.forEach( stu -> System.out.println(stu));
}
método de inserción para insertar
@Test
public void testInsert() throws IOException {
Student student = new Student();
student.setId(1006);
student.setName("林浩");
student.setEmail("[email protected]");
student.setAge(26);
int nums = studentDao.insertStudent(student);
System.out.println("使用 Dao 添加数据:"+nums);
}
4. Comprensión profunda de los parámetros
Pase parámetros al archivo mapper.xml desde el código Java.
tipo de parámetro
parámetroType: el tipo del parámetro de método en la interfaz, el nombre completo o el alias del tipo. Esta propiedad es opcional porque MyBatis puede inferir los parámetros de la declaración entrante específica y el valor predeterminado no está establecido. Los parámetros del método en la interfaz se pasan del código java a la instrucción sql del archivo del mapeador.
- int o java.lang.Integer
- hashmap java.util.HashMap
- lista o java.util.ArrayList
- estudiante o com.bjpowernode.dominio.Estudiante
<seleccionar>, <insertar>, <actualizar>, <eliminar> pueden usar el tipo de parámetro para especificar el tipo.
p.ej:
<delete id="deleteStudent" parameterType="int">
delete from student where id=#{studentId}
</delete>
等同于
<delete id="deleteStudent" parameterType="java.lang.Integer">
delete from student where id=#{studentId}
</delete>
un parámetro sencillo
Los parámetros del método en la interfaz de Dao tienen solo un tipo simple (tipo básico de Java y String), el marcador de posición #{cualquier carácter}, que no tiene nada que ver con el nombre del parámetro del método.
método de interfaz
Student selectById(int id);
archivo del asignador
<select id="selectById" resultType="com.bjpowernode.domain.Student">
select id,name,email,age from student where id=#{studentId}
</select>
#{studentId} , studentId es un nombre de variable personalizado, no relacionado con el nombre del parámetro del método.
método de prueba
@Test
public void testSelectById(){
//一个参数
Student student = studentDao.selectById(1005);
System.out.println("查询 id 是 1005 的学生:"+student);
}
Usar @Param
Cuando el método de interfaz Dao tiene varios parámetros, los parámetros deben usarse por nombre. Agregue @Param("nombre del parámetro personalizado") delante del parámetro del método y use #{nombre del parámetro personalizado} en el archivo del asignador.
例如定义 List<Student> selectStudent( @Param(“personName”)
String name ) { … }
mapper 文件 select * from student where name =
#{ personName}
método de interfaz
List<Student> selectMultiParam(@Param("personName") String name,
@Param("personAge") int age);
Archivo de mapeador
<select id="selectMultiParam" resultType="com.bjpowernode.domain.Student">
select id,name,email,age from student where name=#{personName} or age
=#{personAge}
</select>
método de prueba
@Test
public void testSelectMultiParam(){
List<Student> stuList = studentDao.selectMultiParam("李力",20);
stuList.forEach( stu -> System.out.println(stu));
}
público objetivo del usuario
Use el objeto java para pasar parámetros, el valor del atributo de java es el valor del parámetro requerido por sql. Cada propiedad es un parámetro.
Formato de sintaxis: #{ propiedad,javaType=java en el nombre del tipo de datos
jdbcType=nombre del tipo de datos} javaType, MyBatis puede detectar el tipo de jdbcType y, por lo general, no es necesario configurarlo. Formato común #{propiedad}
Cree un objeto QueryParam que contenga valores de parámetros
package com.bjpowernode.vo;
public class QueryParam {
private String queryName;
private int queryAge;
//set ,get 方法
}
método de interfaz
List<Student> selectMultiObject(QueryParam queryParam);
Archivo de mapeador
<select id="selectMultiObject" resultType="com.bjpowernode.domain.Student">
select id,name,email,age from student where name=#{queryName} or age
=#{queryAge}
</select>
或
<select id="selectMultiObject" resultType="com.bjpowernode.domain.Student">
select id,name,email,age from student
where name=#{queryName,javaType=string,jdbcType=VARCHAR}
or age =#{queryAge,javaType=int,jdbcType=INTEGER}
</select>
método de prueba
@Test
public void selectMultiObject(){
QueryParam qp = new QueryParam();
qp.setQueryName("李力");
qp.setQueryAge(20);
List<Student> stuList = studentDao.selectMultiObject(qp);
stuList.forEach( stu -> System.out.println(stu));
}