Step1 创建数据库表
使用Mysql WorkBench创建数据库表ssm20191229test,并创建table:user,book,addrss,如下:
Step2 创建maven工程
创建maven工程:mybatis20190103oneToOne,完整的结构目录如下:
Step3 配置pom.xml和mybatis.xml
pom.xml代码如下:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mybatis</groupId>
<artifactId>mybatis20190102oneToOne</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>10</source>
<target>10</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- com.mybatis.pomModule是作者之前创建的一个模板jar,其集成了SSM框架的全部jar包 ,详情参考
项目[解决maven项目中pom.xml添加依赖文件的繁琐操作的办法](https://mp.csdn.net/mdeditor/85336803#)-->
<dependency>
<groupId>com.mybatis</groupId>
<artifactId>pomModule</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
mybatis.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.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost/ssm20181229test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 在xml配置下使用resource来指定xml文件 -->
<!-- <mapper resource="UserMapper.xml" /> -->
<!-- 注解配置下,使用class来指定Mapper类 -->
<mapper class="com.cr.mapper.UserMapper"/>
<mapper class="com.cr.mapper.AddressMapper"/>
<mapper class="com.cr.mapper.BookMapper"/>
</mappers>
</configuration>
Step4 创建pojo类
User.java
package com.cr.pojo;
import java.util.List;
public class User {
private int userId;
private String userName;
private String userPassword;
private int userAge;
private String userEmail;
private Address userAddress;
private List<Book> books;
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
public Address getAddress() {
return userAddress;
}
public void setAddress(Address address) {
this.userAddress = address;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}
Address.java
package com.cr.pojo;
/**
* <p>Title: Address.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2019</p>
* <p>Company:uestc</p>
* @author ChenRan
* @date 2019年1月2日
* @version 1.0
*/
public class Address
{
private int addressId;
private String province;
private String city;
public int getAddressId() {
return addressId;
}
public void setAddressId(int addressId) {
this.addressId = addressId;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String toString()
{
return this.province+this.city;
}
}
Book.java
package com.cr.pojo;
public class Book
{
private int bookId;
private String bookName;
private int totalPage;
private int price;
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
Step5 创建mapper类
UserMapper.java
package com.cr.mapper;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;
import com.cr.pojo.User;
public interface UserMapper
{
//one to one
@Select("select * from user where userId = #{userId}")
@Results({
@Result(id=true,column="userId",property="userId"),
@Result(column="userName",property="userName"),
@Result(column="userPassword",property="userPassword"),
@Result(column="userAge",property="userAge"),
@Result(column="userEmail",property="userEmail"),
@Result(column="userId",property="userAddress",one=@One(select="com.cr.mapper.AddressMapper.getAddressByUserId",fetchType= FetchType.EAGER))
})
public User getUserById(int userId);
//one to many
@Select("select * from user where userId=#{userId}")
@Results({
@Result(id=true,column="userId",property="userId"),
@Result(column="userName",property="userName"),
@Result(column="userPassword",property="userPassword"),
@Result(column="userAge",property="userAge"),
@Result(column="userEmail",property="userEmail"),
@Result(column="userId",property="books",many=@Many(select="com.cr.mapper.BookMapper.getBooksByUserId",fetchType= FetchType.EAGER))
})
public User getUserAndBooksById(int userId);
}
AddressMapper.java
package com.cr.mapper;
import org.apache.ibatis.annotations.Select;
import com.cr.pojo.Address;
public interface AddressMapper
{
@Select("select * from address where userId=#{userId}")
public Address getAddressByUserId(int userId);
}
BookMapper.java
package com.cr.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.cr.pojo.Book;
public interface BookMapper
{
@Select("select * from book where userId = #{userId}")
public List<Book> getBooksByUserId(int userId);
}
Step6 创建测试类
oneToOne.java
package com.cr.test;
import java.io.Reader;
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.cr.mapper.UserMapper;
import com.cr.pojo.User;
public class OneToOne
{
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
public static void main(String[] args)
{
test(4);
}
//测试模块
private static void test(int userId)
{
SqlSession session = sqlSessionFactory.openSession();
try
{
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.getUserById(userId);
if(user != null)
{
printUser(user);
}
else
{
System.out.println("userId为"+userId+"的用户不存在!可能未创建或者已经被删除。");
}
}
finally
{
session.close();
}
}
//输出用户信息
private static void printUser(User user)
{
System.out.println("用户id:"+user.getUserId()+"\n姓名:"
+user.getUserName()+"\n年龄:"+user.getUserAge()
+"\n邮箱:"+user.getUserEmail()+"\n地址:"+user.getAddress().toString());
}
}
oneToMany.java
package com.cr.test;
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.cr.mapper.UserMapper;
import com.cr.pojo.Book;
import com.cr.pojo.User;
/**
* <p>Title: oneToMany.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2019</p>
* <p>Company:uestc</p>
* @author ChenRan
* @date 2019年1月2日
* @version 1.0
*/
public class oneToMany
{
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("mybatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
/**
* @param args
*/
public static void main(String[] args)
{
test(5);
}
private static void test(int userId)
{
SqlSession session = sqlSessionFactory.openSession();
try
{
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.getUserAndBooksById(userId);
if(user != null)
{
printUserAndBooks(user);
}
else
{
System.out.println("userId为"+userId+"的用户不存在!可能未创建或者已经被删除。");
}
}
finally
{
session.close();
}
}
private static void printUserAndBooks(User user)
{
System.out.println("用户id:"+user.getUserId()+"\n姓名:"
+user.getUserName()+"\n年龄:"+user.getUserAge()
+"\n邮箱:"+user.getUserEmail());
List<Book> books = user.getBooks();
String messsage = "喜欢的书籍:";
for(Book book:books)
{
messsage = messsage+book.getBookName()+" ";
}
System.out.println(messsage);
}
}
结语
测试结果如下:
运行oneToOne.java:
运行oneToMany.java:
时间关系,写的比较简略。(2019.01.03)