mybatis实现一对多连接查询
底层数据库为postgresql,ORM框架为mybatis。
关键代码如下:
mybatis配置文件如下:
mybatis.xml文件内容为:
- <?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>
- <settings>
- <setting name="cacheEnabled" value="true" />
- <setting name="lazyLoadingEnabled" value="true" />
- <setting name="multipleResultSetsEnabled" value="true" />
- <setting name="useColumnLabel" value="true" />
- <setting name="useGeneratedKeys" value="true" />
- <setting name="defaultExecutorType" value="SIMPLE" />
- <setting name="defaultStatementTimeout" value="25000" />
- </settings>
- <typeAliases>
- <typeAlias type="com.mybatis.domain.User" alias="User" />
- <typeAlias type="com.mybatis.domain.Score" alias="Score" />
- </typeAliases>
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC" />
- <dataSource type="POOLED">
- <property name="driver" value="org.postgresql.Driver" />
- <property name="url" value="jdbc:postgresql://localhost:5432/mybatis" />
- <property name="username" value="postgres" />
- <property name="password" value="admin" />
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <mapper resource="com/mybatis/domain/User.xml" />
- <mapper resource="com/mybatis/domain/Score.xml" />
- </mappers>
- </configuration>
User.java代码为:
- package com.mybatis.domain;
- public class User {
- private Integer id;//用户id
- private String username;//用户名
- private String password;//密码
- private String address;//地址
- public User(){
- }
- public User(String username,String password,String address){
- this.username = username;
- this.password = password;
- this.address =address;
- }
- public User(Integer id,String username,String password,String address){
- this.id = id;
- this.username = username;
- this.password = password;
- this.address =address;
- }
- public int getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String toString(){
- return "当前用户为:id = "+id+",username = "+username+",password = "+password+",address = "+address;
- }
- }
Score.java代码如下:
- package com.mybatis.domain;
- public class Score {
- private Integer id ;//主键id
- private User user;//所属用户
- private int math ;//数学成绩
- private int chinese ;//语文成绩
- private int english ;//英语成绩
- private int computer ;//计算机成绩
- public Score(){
- }
- public Score(User user, int math,int chinese,int english,int computer){
- this.user = user;
- this.math = math;
- this.chinese = chinese;
- this.english = english;
- this.computer = computer;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- public int getMath() {
- return math;
- }
- public void setMath(int math) {
- this.math = math;
- }
- public int getChinese() {
- return chinese;
- }
- public void setChinese(int chinese) {
- this.chinese = chinese;
- }
- public int getEnglish() {
- return english;
- }
- public void setEnglish(int english) {
- this.english = english;
- }
- public int getComputer() {
- return computer;
- }
- public void setComputer(int computer) {
- this.computer = computer;
- }
- public String toString(){
- return "id = "+ this.id+",math = "+this.math+",chinese = "+this.chinese+",english = "+this.english+",computer = "+this.computer+
- ", userid = "+this.user.getId()+",username = "+this.user.getUsername()+",password = "+this.user.getPassword()+
- ",address = "+this.user.getAddress();
- }
- }
user.xml中的关键代码为:
- <resultMap type="User" id="userResult">
- <id property="id" column="userid"/>
- <result property="username" column="username"/>
- <result property="password" column="password"/>
- <result property="address" column="address"/>
- </resultMap>
这里的对象的属性id对应的数据库表列名为userid,这是user对象为pg_score表中
的标示。
score.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="ScoreDaoMapping">
- <resultMap type="Score" id="score">
- <constructor>
- <idArg column="id" javaType="int" />
- <arg column="userid" javaType="int" />
- <arg column="math" javaType="int" />
- <arg column="chinese" javaType="int" />
- <arg column="english" javaType="int" />
- <arg column="computer" javaType="int" />
- </constructor>
- </resultMap>
- <resultMap id="joinSelectScore" type="Score" >
- <id property="id" column="id"/>
- <result property="math" column="math"/>
- <result property="chinese" column="chinese"/>
- <result property="english" column="english"/>
- <result property="computer" column="computer"/>
- <association property="user" column="userid" javaType="User" resultMap="UserDaoMapping.userResult"/>
- </resultMap>
- <insert id="insertScore" parameterType="Score">
- insert into pg_score(math,chinese,english,computer,userid) values(#{math},#{chinese},#{english},#{computer},#{user.id})
- </insert>
- <select id="findScoreByUser" resultMap="joinSelectScore" resultType="list" parameterType="map">
- select
- s.id as id,
- s.math as math,
- s.chinese as chinese,
- s.english as english,
- s.computer as computer,
- u.id as userid,
- u.username as username,
- u.password as password,
- u.address as address
- from pg_score s left outer join pg_userinfo u on s.userid = u.id where u.id=#{userid}
- </select>
- </mapper>
ScoreDao.java中的关键代码为:
- private String resource = "com/mybatis/configuration/mybatis.xml";
- public List<Score> selectScoreByUser(User user) throws IOException{
- Reader reader = Resources.getResourceAsReader(resource);
- SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
- SqlSession session = ssf.openSession();
- reader.close();
- Map<String,Integer> params = new HashMap<String,Integer>();
- params.put("userid", user.getId());
- List<Score> scoreList = session.selectList("ScoreDaoMapping.findScoreByUser", params);
- session.commit();
- session.close();
- return scoreList;
- }
ScoreService.java代码如下:
- package com.mybatis.service;
- import java.io.IOException;
- import java.util.List;
- import com.mybatis.dao.ScoreDao;
- import com.mybatis.domain.Score;
- import com.mybatis.domain.User;
- public class ScoreService {
- private ScoreDao scoreDao = new ScoreDao();
- public ScoreDao getScoreDao() {
- return scoreDao;
- }
- public void setScoreDao(ScoreDao scoreDao) {
- this.scoreDao = scoreDao;
- }
- public List<Score> getScoreByUser(User user) throws IOException{
- return scoreDao.selectScoreByUser(user);
- }
- public void insertScore(Score score) throws IOException{
- scoreDao.insert(score);
- }
- }
Test.java代码如下:
- package com.mybatis.test;
- import java.util.List;
- import com.mybatis.domain.Score;
- import com.mybatis.domain.User;
- import com.mybatis.service.ScoreService;
- import com.mybatis.service.UserService;
- public class Test {
- private UserService userService = new UserService();
- private ScoreService scoreSerice = new ScoreService();
- public static void main(String[] args) throws Exception{
- Test test = new Test();
- //test.insertScore();
- List<Score> scoreList = test.getScore();
- Score score = null;
- for(int i=0;i<scoreList.size();i++){
- System.out.println("第"+(i+1)+"个score对象为:");
- score = scoreList.get(i);
- System.out.println(score);
- }
- }
- public void insertScore() throws Exception{
- List<User> userList = userService.getPageUsers(10, 0);
- User user = userList.get(2);
- Score score = new Score();
- score.setUser(user);
- score.setChinese(80);
- score.setComputer(90);
- score.setEnglish(91);
- score.setMath(98);
- scoreSerice.insertScore(score);
- }
- public List<Score> getScore() throws Exception{
- List<User> userList = userService.getPageUsers(10, 0);
- User user = userList.get(0);
- List<Score> scoreList = scoreSerice.getScoreByUser(user);
- return scoreList;
- }
- /* public User getUserById(int id) throws Exception{
- return userService.getUserById(id);
- }*/
- }
mybatis实现一对多连接查询的更多相关文章
- mybatis 13: 一对多关联查询
业务背景 根据客户id查询客户基本信息,以及客户存在的订单信息 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer id; private String ...
- MyBatis:一对多关联查询
MyBatis从入门到放弃四:一对多关联查询 前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collecti ...
- mybatis collection 一对多关联查询,单边分页的问题总结!
若想直接通过sql实现多级关联查询表结构得有2 个必不可少的字段:id ,parentId,levelId id:主键id, parentId:父id levelId:表示第几级(表本身关联查询的时候 ...
- 使用mybatis进行一对多嵌套查询时出错:输出结果:Country{id=2, name='美国', minister=[null]}
即Minister类作为Country类的关联属性. 查询的输出结果是:Country{id=2, name='美国', minister=[null]} <!--mapper.xml内容--& ...
- mybatis处理一对多的查询
//查询出某个班级对应的所有老师和学生 1.使用嵌套结果 <select id="findClasses3" parameterType="int" re ...
- Mybatis中的多表查询 多对一,一对多
示例:用户和账户 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) 步骤: 1.建立两张表:用户表,账户表 让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中 ...
- MyBatis数据持久化(七)多表连接查询
本节继续以多表连接查询的案例介绍使用resultMap的好处,对于两张以上的表进行关联查询,当我们有选择的从不同表查询所需字段时,使用resultMap是相当方便的.例如我们有两张表,分别为用户表Us ...
- 7.mybatis一对多关联查询
和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...
- MyBatis从入门到放弃四:一对多关联查询
前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...
随机推荐
- python3基础操作
ubuntu下python连接mysql apt-get install python-mysqldb 获取当前时间 >>> from datetime import datetim ...
- DevExpress的提示框
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- web框架原理
web框架的原理: 所有的web应用其实本质上就是socket服务端,而我们的浏览器就是socket客户端. 那么知道了这个之后我们就可以基于socket来写一个我们的服务端: import sock ...
- angularjs的cache
首先要引入angular-cookies.js插件 angular.module('app').service('cache', ['$cookies', function($cookies){ th ...
- Python 文件的操作
新建 # ==================新建==================# 新建文件夹,若倒数第二层文件夹不存在则会报错os.mkdir(r"/home/python" ...
- 学习笔记:Highcharts
(Highcharts 167K: ECharts 354K: jqChart 240K),如果用于网络,Highchart最小 Highcharts 功能强大.开源.美观.图表丰富.兼容绝大多数浏 ...
- 学习笔记: js插件 —— fullPage.js (页面全屏滚动)
fullPage.js (页面全屏滚动) 必须依赖 jquery-ui.min.js, 233K 14760个星. 以后有时间再看. API挺全 https://github.com/alvaro ...
- gzip0
但是Apache是专门为PHP所匹配的,其兼容性最好),类似于IIS.下面我们具体来说说Apache里怎么启用gzip压缩: Apache启用gzip 如果要开启gzip的话,一定要打开下面二个模块. ...
- Mybatis七(MBG 逆向工程)
官方地址:http://www.mybatis.org/generator/ https://github.com/mybatis/generator/releases <1>编写mbg. ...
- PHP Yii2.0PHPexecl导入。
use app\models\execl; use \PHPExcel; /*execl导入数据*/ public function Execlupload(){ if(Yii::$app->r ...