Mybactis一对多思想以及代码
所谓一对多是思想就是一张表对应多张表,打个很简单的比喻,刚好现在是双11刚刚过,就用淘宝购买东西来比喻,一个用户在淘宝中买了多种东西,每种商品对应着不同的表,而这个用户是一个单独的表,表中有这这个用户的基本信息,而这样的形式就可以称为一对多的思想。
我们要实现一对多的思想,用代码来表示,在mybactis中无非是使用增、删、改查,来实现业务要求。(我这里是实现一个用户在某帖子上发的帖子,与他的帖子内容)
第一步:
我们首先要有这个用户,与他发表的帖子的实体类
代码如下:
用户实体类:
package com.huweiyang.bean;
import java.io.Serializable;
import java.util.List;
/*
* 编写用户的实体类
* 注意:必须要实现Serializable接口,并要有一个集合属性
*/
publicclassUsers implements Serializable{
privateintid;
private String username;
private String main;
private List<Post> post;
publicint getId() {
returnid;
}
publicvoid setId(intid) {
this.id = id;
}
public String getUsername() {
returnusername;
}
publicvoid setUsername(String username) {
this.username = username;
}
public String getMain() {
returnmain;
}
publicvoid setMain(String main) {
this.main = main;
}
public List<Post>getPost() {
returnpost;
}
publicvoidsetPost(List<Post> post) {
this.post = post;
}
}
帖子实体类:
package com.huweiyang.bean;
import java.io.Serializable;
/*
* 编写帖子的实体类
* 注意:这里也要实现Serializable接口但是不用编写一个集合属性
*/
publicclassPost implements Serializable{
publicint getPost_id() {
returnpost_id;
}
publicvoid setPost_id(intpost_id) {
this.post_id = post_id;
}
public Users getUsers() {
returnusers;
}
publicvoid setUsers(Users users) {
this.users = users;
}
public String getPsrt() {
returnpsrt;
}
publicvoid setPsrt(String psrt) {
this.psrt = psrt;
}
public String getMoter() {
returnmoter;
}
publicvoid setMoter(String moter) {
this.moter = moter;
}
privateintpost_id;
private Users users;
private String psrt;
private String moter;
}
第二步:
我们需要来配置实体类的映射,这里值得注意的是我们的返回值并不是以前的resultType而是配置一个resultMapp的属性来返回。
代码如下:
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "mybatis-3-mapper.dtd">
<mapper namespace="com.huweiyang.bean">
<!-- 配置resultMap -->
<resultMap type="Users" id="resultserusMap">
<result property="id" column="usersid"/>
<result property="username" column="username"/>
<result property="main" column="main"/>
<!-- 使用collection使两张表关联 -->
<collection property="post" ofType="com.huweiyang.bean.Post"column="usersid">
<id property="id"column="psot_id" javaType="int"jdbcType="INTEGER"/>
<result property="psrt" column="psrt"javaType="String" jdbcType="VARCHAR"/>
<result property="moter" column="moter"javaType="String" jdbcType="VARCHAR"/>
</collection>
</resultMap>
<!-- 编写sql语句 -->
<select id="getUsers"resultMap="resultserusMap" parameterType="int">
selectu.*,p.* from users u, post p where u.id=p.usersid and id = #{users_id}
</select>
</mapper>
第三步:
我们现在要来配置mybactis的基本配置
代码如下:
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDconfig 3.0//EN" "mybatis-3-config.dtd">
<configuration>
<!-- 配置实体类路径 -->
<typeAliases>
<typeAlias type="com.huweiyang.bean.Users" alias="Users"/>
<typeAlias type="com.huweiyang.bean.Post" alias="Post"/>
</typeAliases>
<!-- 配置mysql连接方式 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybaits"/>
<property name="username" value="root"/>
<property name="password" value="lookme"/>
</dataSource>
</environment>
</environments>
<!-- 配置实体类映射路径 -->
<mappers>
<mapper resource="com/huweiyang/bean/users.xml"/>
</mappers>
</configuration>
第五步:
现在我们有来测试这个程序是否有用就要使用这个测试类来进行测试,在这里我只实现了一个查的方法,也没有使用封装的思想。
代码如下:
package com.huweiyang.mapping;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.huweiyang.bean.Post;
import com.huweiyang.bean.Users;
publicclassMapping {
publicstaticvoid main(String[] args) throws IOException {
// 读取config.xml配置文件
Reader ser = Resources.getResourceAsReader("config.xml");
// 获取sqlseeion对象
SqlSessionFactorysqlsessionFactory= newSqlSessionFactoryBuilder().build(ser);
SqlSessionsqlsession= sqlsessionFactory.openSession();
// 调用sqlsession自带的selectOne方法,并给它相对应的参数
Usersuser=sqlsession.selectOne("com.huweiyang.bean.getUsers",1);
// 输出用户表中的用户姓名
System.out.print("usersname:"+user.getUsername()+",");
// 输出帖子表中具体信息
List<Post>posts= user.getPost();
for(Post p: posts){
System.out.println("psrt:"+p.getPsrt());
System.out.println("moter:"+p.getMoter());
}
}
}