MyBatis (多对多)

MyBatis优点

1 与JDBC相比,减少了50%以上的代码量。

2 MyBatis是最简单的持久化框架,小巧并且简单易学。

3 MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。

4 提供XML标签,支持编写动态SQL语句。

5 提供映射标签,支持对象与数据库的ORM字段关系映射。

MyBatis框架的缺点

1 SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。

2 SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

实现代码(有解释)

实体类Groups

public class Groups {
	int g_id;
	String groupname;
	//把user类装进集合
	List<User> user;
	
	public List<User> getUser() {
		return user;
	}
	public void setUser(List<User> user) {
		this.user = user;
	}
	public int getG_id() {
		return g_id;
	}
	public void setG_id(int g_id) {
		this.g_id = g_id;
	}
	public String getGroupname() {
		return groupname;
	}
	public void setGroupname(String groupname) {
		this.groupname = groupname;
	}

实体类User

public class User {
	int u_id;
	String name;
	String phone;
	//把group类装进集合
	List<Groups> group;

	public List<Groups> getGroup() {
		return group;
	}

	public void setGroup(List<Groups> group) {
		this.group = group;
	}

	public int getU_id() {
		return u_id;
	}

	public void setU_id(int u_id) {
		this.u_id = u_id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

实体类Usergroup

public class Usergroup {
	int u_id;
	int g_id;

	public int getU_id() {
		return u_id;
	}

	public void setU_id(int u_id) {
		this.u_id = u_id;
	}

	public int getG_id() {
		return g_id;
	}

	public void setG_id(int g_id) {
		this.g_id = g_id;
	}

自定义方法(接口)

public interface GroupMapper {
	//自己定义一个方法,等下在测试类掉用
	public Groups getGroup(int id);
	}

xml配置文件
group配置文件

<!-- 命名空间 -->
<mapper namespace="zhiyuan.com.dao.GroupMapper">
		<!-- type=对应实体类名 -->
	<resultMap type="Groups" id="getmap">
		<result property="g_id" column="g_id" />
		<result property="groupname" column="groupname" />
		<!-- zhiyuan.com.dao.GroupMapper 别名路径  接口里面的方法联合usergroup里面的selectid-->
		<collection property="user" column="g_id" select="zhiyuan.com.dao.GroupMapper.getall"></collection>
	</resultMap>

		<!-- parameterType 返回值类型   resultMap 与上同名-->
	<select id="getGroup" parameterType="int" resultMap="getmap">
		<!-- 查询表中数据 -->
		select * from
		groups where g_id=#{g_id}
	</select>

GroupMapper配置文件

<mapper namespace="zhiyuan.com.dao.GroupMapper">
	<resultMap type="User" id="map">
		<result property="u_id" column="u_id"/>
		<result property="name" column="name"/>
		<result property="phone" column="phone"/>
	</resultMap>


  	<select id="getall" parameterType="int" resultMap="map">
  		select * from `user`,usergroup where `user`.u_id=usergroup.u_id and
		usergroup.g_id=#{g_id}
  	</select>
</mapper>

config配置文件

<configuration>
<!--别名-->
	<typeAliases>
		<package name="zhiyuan.com.bean" />
	</typeAliases>
<!--基础环境配置:包含数据源和事务管理 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/zhongyuan1" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<mapper resource="zhiyuan/com/dao/guoups.xml"/>
		<mapper resource="zhiyuan/com/dao/userGroup.xml"/>
	</mappers>

测试类

public static void main(String[] args) throws IOException {
		// 通过Resources调用getresourceasreader方法读取,获得了一个Reader对象
		Reader is =Resources.getResourceAsReader("config.xml");
		// 通过new一个sqlsessionfactorybuild调用build方法获得一个sqlsessionfactory对象
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
		// 通过sqlsessionfactory对象调用opensession方法获得一个session对象
		SqlSession session= factory.openSession();
		// 通过session对象调用getmapper方法得到接口的实例
		GroupMapper mapper =session.getMapper(GroupMapper.class);
		//通过接口对象调用接口里面的方法
		Groups groups =mapper.getGroup(2);
		System.out.println("组  :"+groups.getGroupname());
		//转换类型
		List<User> user =groups.getUser();
		//遍历
		for(User a:user){
			System.out.println("姓名:"+a.getName());
			System.out.println("电话:"+a.getPhone());
		}
	}

代码效果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43271710/article/details/84402582
今日推荐