在使用mybatis前,请导入mybatis依赖,因为要使用数据库所以把mysql也写进来
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>MyBatis_01</groupId>
<artifactId>MyBatis_01</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>MyBatis_01 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--引入myBatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--引入mySql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.43</version>
</dependency>
</dependencies>
<build>
<finalName>MyBatis_01</finalName>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
还要写一个mybatis-config.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>
<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://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--一对一-->
<mapper resource="com/zking/entity/User.xml"/>
<!--一对多-->
<mapper resource="com/zking/entity/Province.xml"/>
</mappers>
</configuration>
一对一:首先创建两个实体类(我创建的是User和Card)
package com.zking.entity;
public class User{
private int uid;
private String uname;
//一对一关系
private Card card;
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
public User() {
}
public User(int uid, String uname) {
this.uid = uid;
this.uname = uname;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", uname='" + uname + '\'' +
'}';
}
}
package com.zking.entity;
public class Card {
private int uid;
private String cnum;
public Card() {
}
public Card(int uid, String cnum) {
this.uid = uid;
this.cnum = cnum;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getCnum() {
return cnum;
}
public void setCnum(String cnum) {
this.cnum = cnum;
}
@Override
public String toString() {
return "Card{" +
"uid=" + uid +
", cnum='" + cnum + '\'' +
'}';
}
}
在写一个UserDao接口
package com.zking.dao;
import com.zking.dto.UserDto;
import com.zking.entity.User;
public interface UserDao {
/**
* 查询编号为1的人的姓名开卡号
*/
public User getUserAndCardById(int uid);
}
在写一个User.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="com.zking.dao.UserDao">
<resultMap id="userMap" type="com.zking.entity.User">
<id property="uid" column="uid"></id>
<result property="uname" column="uname"></result>
<association property="card" javaType="com.zking.entity.Card">
<result property="cnum" column="cnum"></result>
</association>
</resultMap>
<!--第三种方法设置关系-->
<select id="getUserAndCardById" parameterType="int" resultMap="userMap">
SELECT u.*,c.cnum FROM user u,card c WHERE u.uid=c.uid and u.uid=#{uid}
</select>
</mapper>
最后写一个测试类
package com.zking.test;
import com.zking.dao.UserDao;
import com.zking.entity.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestCRUD {
private SqlSession sqlSession;
@Before
public void before(){
try {
//读取配置文件,获取SQLSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//通过SQLSessionFactory获取SQLSession
sqlSession = sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
}
@After
public void after(){
sqlSession.commit();
}
//测试一对一
@Test
public void testOne(){
UserDao userDao=sqlSession.getMapper(UserDao.class);
User user=userDao.getUserAndCardById(1);
System.out.println(user);
System.out.println(user.getCard().getCnum());
}
}
一对多:首先创建两个实体类(我创建的是Province和City)
package com.zking.entity;
import java.util.Set;
public class Province {
private int pid;
private String pname;
private Set<City> cities;
public Set<City> getCities() {
return cities;
}
public void setCities(Set<City> cities) {
this.cities = cities;
}
public Province() {
}
public Province(int pid, String pname) {
this.pid = pid;
this.pname = pname;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
@Override
public String toString() {
return "Province{" +
"pid=" + pid +
", pname='" + pname + '\'' +
'}';
}
}
package com.zking.entity;
public class City {
private int cid;
private String cname;
private int pid;
public City() {
}
public City(int cid, String cname, int pid) {
this.cid = cid;
this.cname = cname;
this.pid = pid;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
@Override
public String toString() {
return "City{" +
"cid=" + cid +
", cname='" + cname + '\'' +
", pid=" + pid +
'}';
}
}
在写一个ProvinceDao接口
package com.zking.dao;
import com.zking.entity.Province;
public interface ProvinceDao {
//查询某个省份所有的城市
public Province getProvinceAndCityById(int pid);
}
在写一个Province.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="com.zking.dao.ProvinceDao">
<resultMap id="provinceMap" type="com.zking.entity.Province">
<id property="pid" column="pid"></id>
<result property="pname" column="pname"></result>
<!--对应集合就要用ofType-->
<collection property="cities" ofType="com.zking.entity.City">
<id property="cid" column="cid"></id>
<result property="cname" column="cname"></result>
</collection>
</resultMap>
<select id="getProvinceAndCityById" parameterType="int" resultMap="provinceMap">
SELECT p.*,c.* FROM province p,city c WHERE p.pid=c.pid AND p.pid=#{pid}
</select>
</mapper>
最后测试
package com.zking.test;
import com.zking.dao.ProvinceDao;
import com.zking.entity.City;
import com.zking.entity.Province;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestCRUD {
private SqlSession sqlSession;
@Before
public void before(){
try {
//读取配置文件,获取SQLSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//通过SQLSessionFactory获取SQLSession
sqlSession = sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
}
@After
public void after(){
sqlSession.commit();
}
@Test
public void testwo(){
ProvinceDao provinceDao=sqlSession.getMapper(ProvinceDao.class);
Province province=provinceDao.getProvinceAndCityById(1);
System.out.println(province.getPid()+province.getPname());
for (City city : province.getCities()) {
System.out.println(city.getCname());
}
}
}
多对多:创建两个实体类(User和Roles)
package com.zking.entity;
import java.util.Set;
public class User {
private int uid;
private String uname;
private Set<Roles> roles;
public Set<Roles> getRoles() {
return roles;
}
public void setRoles(Set<Roles> roles) {
this.roles = roles;
}
public User() {
}
public User(int uid, String uname) {
this.uid = uid;
this.uname = uname;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", uname='" + uname + '\'' +
'}';
}
}
package com.zking.entity;
import java.util.Set;
public class Roles {
private int rid;
private String rname;
private Set<User> users;
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public Roles() {
}
public Roles(int rid, String rname) {
this.rid = rid;
this.rname = rname;
}
public int getRid() {
return rid;
}
public void setRid(int rid) {
this.rid = rid;
}
public String getRname() {
return rname;
}
public void setRname(String rname) {
this.rname = rname;
}
@Override
public String toString() {
return "Roles{" +
"rid=" + rid +
", rname='" + rname + '\'' +
'}';
}
}
写一个UserDao接口
package com.zking.dao;
import com.zking.entity.User;
public interface UserDao {
public User getUserAndRolesById(int uid);
}
写两个User.xml,Roles.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="com.zking.dao.UserDao">
<resultMap id="userMap" type="com.zking.entity.User">
<id property="uid" column="uid"></id>
<result property="uname" column="uname"></result>
<collection property="roles" ofType="com.zking.entity.Roles">
<id property="rid" column="rid"></id>
<result property="rname" column="rname"></result>
</collection>
</resultMap>
<select id="getUserAndRolesById" parameterType="int" resultMap="userMap">
SELECT * FROM user u,roles r,u_r ur where ur.uid=u.uid AND ur.rid=r.rid AND u.uid=#{uid}
</select>
</mapper>
<?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="com.zking.dao.UserDao">
<resultMap id="rolesMap" type="com.zking.entity.Roles">
<id property="rid" column="rid"></id>
<result property="rname" column="rname"></result>
<collection property="users" ofType="com.zking.entity.User">
<id property="uid" column="uid"></id>
<result property="uname" column="uname"></result>
</collection>
</resultMap>
<select id="getUserAndRolesById" parameterType="int" resultMap="rolesMap">
SELECT * FROM user u,roles r,u_r ur where ur.uid=u.uid AND ur.rid=r.rid AND u.uid=#{uid}
</select>
</mapper>
最后测试
package com.zking.test;
import com.zking.dao.UserDao;
import com.zking.entity.Roles;
import com.zking.entity.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestSelect {
private SqlSession sqlSession;
@Before
public void before(){
try {
//读取配置文件,获取SQLSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//通过SQLSessionFactory获取SQLSession
sqlSession = sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
}
@After
public void after(){
sqlSession.commit();
}
@Test
public void test01(){
UserDao userDao=sqlSession.getMapper(UserDao.class);
User user=userDao.getUserAndRolesById(2);
System.out.println(user.getUid() + user.getUname());
for (Roles roles : user.getRoles()) {
System.out.println(roles.getRname());
}
}
}
使用myBatis动态Sql实现分页查询
写一个实体类(Person)
package com.zking.entity;
public class Person {
private int pid;
private String pname;
private String psex;
private int page;
public Person() {
}
public Person(int pid, String pname, String psex, int page) {
this.pid = pid;
this.pname = pname;
this.psex = psex;
this.page = page;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPsex() {
return psex;
}
public void setPsex(String psex) {
this.psex = psex;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
@Override
public String toString() {
return "Person{" +
"pid=" + pid +
", pname='" + pname + '\'' +
", psex='" + psex + '\'' +
", page=" + page +
'}';
}
}
在写一个PersonDao接口
package com.zking.dao;
import com.zking.entity.Person;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface PersonDao {
public List<Person> getAllPerson(@Param(value = "pageNo") int pageNo);
}
在写一个Person.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="com.zking.dao.PersonDao">
<select id="getAllPerson" resultType="com.zking.entity.Person">
SELECT * FROM person
<if test="pageNo!=null">
<if test="pageNo>=0">
limit #{pageNo},5
</if>
</if>
</select>
</mapper>
必须在myBatis-config.xml中写<mapper resource="com/zking/entity/Person.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>
<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://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--多对多-->
<mapper resource="com/zking/entity/User.xml"/>
<mapper resource="com/zking/entity/Person.xml"/>
</mappers>
</configuration>
测试
package com.zking.test;
import com.zking.dao.PersonDao;
import com.zking.entity.Person;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class TestSelect {
private SqlSession sqlSession;
@Before
public void before(){
try {
//读取配置文件,获取SQLSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
//通过SQLSessionFactory获取SQLSession
sqlSession = sqlSessionFactory.openSession();
} catch (IOException e) {
e.printStackTrace();
}
}
@After
public void after(){
sqlSession.commit();
}
int i=1;
@Test
public void test2(){
PersonDao personDao= sqlSession.getMapper(PersonDao.class);
List<Person> person=personDao.getAllPerson((i-1)*5);
for (Person person1 : person) {
System.out.println(person1);
}
}
}