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属性. 搭建开发 ...
随机推荐
- C#存储过程中传入传出参数
作者:卞功鑫 ,转载请保留http://www.cnblogs.com/BinBinGo/p/6399847.html //1 连接字符串 string connectionString = &qu ...
- MybatisUtil的使用,便于产生SqlSession
简化代码,实现一个静态的工具类来实现获取SqlSession 主要有getSqlSessionFactory()和getSqlSession() public class MybatisUtil { ...
- struts Action设置数据的方法
一.属性驱动 注:示例中的实体类没有相应展示出来 1.基本数据类型的属性 基本数据类型的属性指每一个前台提交的属性在后台对应的Action类中都有相应的属性与之相对应 例如:前台表单: <for ...
- Ambari集群的搭建(离线安装)
我们先克隆几台机器 我们打开克隆出来的机器 我们先把主机名修改一下 我们把主机名改成am2 下一步我们来配置网卡 把原来的eth0的注释掉,把现在的eth1改成eth0,同时把mac地址记下来 保存退 ...
- Linux性能优化 第六章 性能工具:磁盘I/O
6.1 磁盘I/O介绍 一般来说,Linux磁盘的每个分区要么包含一个文件系统,要么包含一个交换分区.这些分区被挂载到Linux根文件系统,该系统由/etc/fstab指定.这些被挂载的文件系统包含了 ...
- Hive快捷查询:不启用Mapreduce job启用Fetch task
启用MapReduce Job是会消耗系统开销的.对于这个问题,从Hive0.10.0版本开始,对于简单的不需要聚合的类似SELECT <col> from <table> L ...
- SUI-mobile起步
减少不必要造轮子的过程,于是在APP项目中推进SUI Mobile的使用,主要目的是使用它的一些基本样式,以及各种封装好的组件,但并没有创建单页应用. 刚刚开始使用,使用之中遇到一个槽点,记录一下(主 ...
- Ubantu下安装jdk 教程
ubuntu 安装jdk 的两种方式: 这篇帖子,有些地方,写的有点问题.我只能按照记忆中的印象,修改一下. 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通 ...
- swt text 回车 defaultSelected
今天试了一下SWT控件 TEXT 中的回车事件,使用 defaultSelected 进行处理,结果怎么也不能触发事件. 经过仔细排查,发现是TEXT选中了 wrap 的原因,毕竟如果是多行的话,肯定 ...
- 《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 2
▶ 书中第十一章的程序,主要讲了 Windows 接口,在小黑框中进行程序交互 ● 在屏幕指定位置输出带自定义属性的文字 INCLUDE Irvine32.inc .data outHandle HA ...