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());
}
}
代码效果