第一步:导入两个jar包分别为mybatis-3.2.3.jar和mysql-connector-java-5.1.25-bin.jar,如下图所示:
第二步:创建两张表(本人两张表分别为person和food),如下图所示:
person表
food表
以下是几条相关SQL语句:
创建数据库语句:create database 数据库名;
创建表语句:create table 表名(id(字段名) int(数据类型)primary key(设置主键), name varchar(10) , sex varchar(10) );
添加值:insert into 表名(id,name,sex) values (1,“李四”,“男”);
注:一张表中只能设置一个主键
第三步:创建改表相对应的实体类:
推荐类与表名同名(类命名规范:类名首字母大写)
Person类:
package com.zhiyuan.Bean;
import java.io.Serializable;
import java.util.List;
public class Person implements Serializable{
//implements:用于实现接口
//Serializable:接口是启用其序列化功能的接口
private int id;
private String name;
private String sex;
//以上三个属性推荐与数据库里面的字段名保持一致
private List<Food> list;
//list用于接收多条记录
public List<Food> getList() {
return list;
}
public void setList(List<Food> list) {
this.list = list;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
//以上get和set方法可以通过鼠标右击》然后将鼠标放在Source上》Generate Getters and Setters...》勾选你需要生成get,set的属性点击ok即可
}
Food类:
package com.zhiyuan.Bean;
import java.io.Serializable;
public class Food implements Serializable{
private int id;
private int p_id;
private String fname;
private String fkouwei;
private Person person;//用于实现多对一,在此可有可无
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getP_id() {
return p_id;
}
public void setP_id(int p_id) {
this.p_id = p_id;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getFkouwei() {
return fkouwei;
}
public void setFkouwei(String fkouwei) {
this.fkouwei = fkouwei;
}
}
第四步:创建好实体映射文件
推荐映射文件名与实体类名保存一致(文件名全部小写)
person.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "mybatis-3-mapper" "mybatis-3-mapper.dtd" >
<mapper namespace="com.zhiyuan.Bean">
<!-- namespace:命名空间,com.zhiyuan.Bean:实体类包名 -->
<resultMap type="person" id="aa">
<!-- type:如果在主配置文件中配置了别名,这里可以写别名,如没有配置这里写Person类全路径 -->
<result property="id" column="id"/>
<!-- property:与实体类中的属性名保持一致,column与数据库里面的字段名保持一致 -->
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<collection property="list" ofType="Food" column="p_id">
<!-- 一对多用collection,多对一用association -->
<!-- ofType:和type用法一样,column:两表之间有关系的字段 -->
<result property="id" column="id"/>
<result property="p_id" column="p_id"/>
<result property="fname" column="fname"/>
<result property="fkouwei" column="fkouwei"/>
</collection>
</resultMap>
<select id="GetID" parameterType="int" resultMap="aa">
<!-- id:唯一标识符,parameterType:传入参数类型,resultMap:本人理解为自定义返回参数类型,详细可以参考:http://www.cnblogs.com/fsjohnhuang/p/4076592.html,resultMap中aa与resultMap泛型id值保持一致 -->
select * from person,food where person.id=food.p_id and person.id=#{id}
<!-- 查询语句,#{id}:表示占位符 -->
</select>
</mapper>
第五步:创建好MaBatis的主配置文件
推荐映射文件名与实体类名保存一致(文件名全部小写)
config.xml主配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "mybatis-3-config" "mybatis-3-config.dtd" >
<configuration>
<typeAliases>
<!-- 配置别名 -->
<package name="com.zhiyuan.Bean"/>
<!-- 批量定义别名:name:指定包名,mybatis自动扫描包中的类,自动定义别名,别名就是类名(首字母大小写都可以) -->
</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/数据库名"/>
<property name="username" value="用户名"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/zhiyuan/Dao/person.xml"/>
<!-- 映射路径,person.xml的路径 -->
</mappers>
</configuration>
第六步:编译测试类
Text测试类:
package com.zhiyuan.Text;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.zhiyuan.Bean.Food;
import com.zhiyuan.Bean.Person;
public class Text {
public static void main(String[] args) throws IOException {
Reader reader = Resources.getResourceAsReader("config.xml");
//通过Resources类调用getResourceAsReader方法来获取 config主配置文件并用Reader来进行接收
SqlSessionFactory session = new SqlSessionFactoryBuilder().build(reader);//创建工厂回话
Person person = session.openSession().selectOne("com.zhiyuan.Bean.GetID",1);
//openSession用来创建Sqlsession,selectOne用来查询一条记录(一条记录用实体类接收),selectList用来查询一条或多条记录
System.out.println("ID:"+person.getId()+" 姓名:"+person.getName()+" 性别:"+person.getSex());
List<Food> list = person.getList();
for (Food food : list) {
<!-- 加强for循环(接收类型 属性名:list集合名) -->
System.out.println("ID:"+food.getId()+" P_Id:"+food.getP_id()+" 食物名:"+food.getFname()+" 口味:"+food.getFkouwei());
}
}
}
运行结果如下图: