집 >데이터 베이스 >MySQL 튜토리얼 >마이바티스의 기본 이해하기
ㅋㅋㅋ 보고되었습니다!)
<?xml version="1.0" encoding="UTF-8" ?>nbsp;configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><!--configuration核心配置 配置文件的根元素 --><configuration> <!-- 属性:定义配置外在化 --> <properties></properties> <!-- 设置:定义mybatis的一些全局性设置 --> <settings> <!-- 具体的参数名和参数值 --> <setting></setting> </settings> <!-- 类型名称:为一些类定义别名 --> <typealiases> <!-- 实体类少 建议 第一种取别名方式--> <typealias></typealias> <!--实体类多 建议 第二种取别名方式 默认情况下用这种方式 别名为类名 首字母最好小写 --> <package></package> </typealiases> <!-- 类型处理器:定义Java类型与数据库中的数据类型之间的转换关系 --> <typehandlers></typehandlers> <!-- 对象工厂 --> <objectfactory></objectfactory> <!-- 插件:mybatis的插件,插件可以修改mybatis的内部运行规则 --> <plugins> <plugin></plugin> </plugins> <!-- 环境:配置mybatis的环境 --> <environments> <!-- 环境变量:可以配置多个环境变量,比如使用多数据源时,就需要配置多个环境变量 --> <environment> <!-- 事务管理器 --> <transactionmanager></transactionmanager> <!-- 数据源 配置连接我的数据库--> <datasource> <property></property> <property></property> <property></property> <property></property> </datasource> </environment> </environments> <!-- 数据库厂商标识 --> <databaseidprovider></databaseidprovider> <!-- 映射器:指定映射文件或者映射类 --> <mappers> <mapper></mapper> </mappers></configuration>Paging
데이터 액세스 감소 limt는 페이징을 구현합니다 sql 문: select * from table name limt 0,5;0: 데이터의 시작 위치
5: 길이 the data하나: Mybatis 1 인터페이스
List<user> getUserByLimit(Map<string> map);</string></user>2 mapeer.xml
<select> select * from mybatis.user limit ${starIndex},${pageSize} </select>2-1 결과 집합 매핑
<resultmap> <result></result> </resultmap>
@Test public void getUserByLimitTest() { SqlSession sqlSession = MyBatisUtils.getSqlSession (); UserMapper mapper = sqlSession.getMapper (UserMapper.class); HashMap hashMap = new HashMap<string> (); hashMap.put ("starIndex", 1); hashMap.put ("pageSize", 2); List userByLimit = mapper.getUserByLimit (hashMap); for (Object o : userByLimit) { System.out.println (o); } sqlSession.close (); }</string>
<select> select * from mybatis.user </select>
3. 테스트: /**
* 测试使用RowBounds实现分页
*/@Test
public void getUserByLimitRowBoundsTest() {
SqlSession sqlSession = MyBatisUtils.getSqlSession ();
RowBounds rowBounds = new RowBounds (0, 2);
List<user> userList = sqlSession.selectList ("com.kuang.w.dao.UserMapper.getUserList", null, rowBounds);
for (User user : userList) {
System.out.println (user);
}
//关闭
sqlSession.close ();
}</user>
세 번째 방법: Mybatis의 페이징 플러그인 pageHeIper
sql 다대일 처리
사용 데이터베이스:
pojo
package com.kuang.w.pojo; import lombok.Data; /** * @author W */ @Data public class Teacher { private int tId; private String tName; }엔터티 클래스에 해당합니다. 데이터베이스의 사용자 테이블은 Student
package com.kuang.w.pojo;import lombok.Data;/** * @author W */@Datapublic class Student { private int id; private int tid; private String name; private String password; private Teacher teacher;}1 엔터티 클래스에 해당합니다. 구성 구현 인터페이스
List<student> getStudentList();</student>
<!-- 多对一查询 1 子查询 mysql 通过一个表里是数据 与另一个表的一个数据相的情况下 查询另一个的数据 一起显示 --> <select> select * from mybatis.user; </select> <resultmap> <!-- 复杂属性 对象用 :association 集合用:collection--> <!--column 数据库中的字段 property 实体类中的属性--> <result></result> <result></result> <result></result> <!--javaType 一个 Java 类的全限定名 ,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。 然而,如果你映射到的是 HashMap, 那么你应该明确地指定 javaType 来保证行为与期望的相一致。--> <association></association> </resultmap> <select> select * from mybatis.teacher_table where tid = #{id}; </select>
<!--2 多表联查--> <select> select u.id uid, u.name uname, u.password upassword, u.tid utid, t.tname from mybatis.user u, mybatis.teacher_table t where t.tid = u.tid; </select> <!-- 映射--> <resultmap> <result></result> <result></result> <result></result> <result></result> <association> <result></result> </association> </resultmap>3 테스트
<?xml version="1.0" encoding="UTF8" ?>nbsp;configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <properties></properties> <settings> <setting></setting> </settings> <typealiases> <typealias></typealias> <typealias></typealias> </typealiases> <environments> <environment> <transactionmanager></transactionmanager> <datasource> <property></property> <property></property> <property></property> <property></property> </datasource> </environment> </environments> <mappers> <!-- <mapper resource="com/kuang/w/dao/TeacherMapper.xml"></mapper> <mapper resource="com/kuang/w/dao/StudentMapper.xml"></mapper>--> <mapper></mapper> <mapper></mapper> </mappers></configuration>sql 일대다 처리
데이터 테이블 구조에 해당하는 엔터티 클래스는 변경되지 않습니다.
첫 번째 방법: 다중 테이블 공동 쿼리
@Test public void getStudentListTest() { SqlSession sqlSession = MyBatisUtils.getSqlSession (); StudentMapper mapper = sqlSession.getMapper (StudentMapper.class); List<student> studentList = mapper.getStudentList (); for (Student student : studentList) { System.out.println (student); } sqlSession.commit (); sqlSession.close (); }</student>2.1 xml 구현 인터페이스
List<teacher> getTeacher(int tid);</teacher>2.2 매핑 구성
<select> select t.tid, t.tname, u.id, u.name, u.password from mybatis.user u, mybatis.teacher_table t where t.tid = u.tid and t.tid = #{tid}; </select>3 테스트
<resultmap> <result></result> <result></result> <!-- 复杂属性 对象用 :association 集合用:collection--> <collection> <!--javaType 指定属性类型 一个 Java 类的全限定名--> <result></result> <result></result> <result></result> <result></result> </collection> </resultmap>Result
/*测试一对多*/ @Test public void getTeacherTest2() { SqlSession sqlSession = MyBatisUtils.getSqlSession (); TeacherMapper mapper = sqlSession.getMapper (TeacherMapper.class); List<teacher> teacher = mapper.getTeacher (1); for (Teacher teacher1 : teacher) { System.out.println (teacher1); } //提交事务 架子 这里可以不要 sqlSession.commit (); // 关闭 sqlSession.close (); }</teacher>두 번째 방법: 하위 쿼리
1인터페이스com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.kuang.w.dao.myTest,getTeacherTest2
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.PooledDataSource forcefully closed/removed all connections.PooledDataSource forcefully closed/removed all connections.PooledDataSource forcefully closed/removed all connections.PooledDataSource forcefully closed/removed all connections.Opening JDBC Connection
Created connection 164974746.Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@9d5509a]==> Preparing: select t.tid, t.tname, u.id, u.name, u.password from mybatis.user u, mybatis.teacher_table t where t.tid = u.tid and t.tid = ?; ==> Parameters: 1(Integer)
2 인터페이스 구현
List<teacher> getTeacher(int tid);</teacher>
3테스트 위와 같습니다. . . .
관련 무료 학습 권장 사항:
(동영상)
위 내용은 마이바티스의 기본 이해하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!