java增強: mybatis框架
阿新 • • 發佈:2018-12-10
- mybatis簡介
- 如何使用: 入門級
- 進階教程
MyBatis ,持久層框架, 以XML 或註解的方式, 將介面和 Java 的 POJO(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
part1: 初步配置使用
(使用 idea + maven)
第一步: 建立一個module, java --> 新增maven 支援,在pom.xml中, 新增依賴
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency>
第二步: 建立javabean類---->表和java類的對映配置: 類名Mapper.xml---> 配置資料庫連線資訊: mybatis-config.xml
A, 建立package: a, 新建javabean類
public class User { //欄位 private int id; private int age; private String name; private String sex; private List<Orders> listOrders; //構造 public User(int id ,int age, String name, String sex) { this.age = age; this.name = name; this.sex = sex; this.id=id; } public User() { } //get,set //toString() }
B, 表和java類的對映配置: 類名Mapper.xml (放在: resources資料夾下)
<?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="users"> <insert id="insert"> insert into users2(name,sex) values(#{name},#{sex}) </insert> <update id="update" > update users2 set name=#{name}, sex=#{sex} where id=#{id} </update> <select id="selectById" resultType="a.User" > select * from users2 where id=#{id} </select> <select id="selectAll" resultType="_user"> select * from users2 </select> </mapper>
C, 配置資料庫連線資訊: 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>
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
<!--別名-->
<typeAliases>
<typeAlias type="a.User" alias="_user" />
<typeAlias type="a.Orders" alias="_orders" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
第三步: 開始使用mybatis 的java api
public class TestMybatis {
SqlSession session;
@Before
public void init() throws IOException {
//載入檔案
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//建立session
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
session = factory.openSession();
}
/**
* 插入
* @throws IOException
*/
@Test
public void t() throws IOException {
//crud
int res = session.insert("users.insert", new User(23, "insert3", "boy"));
session.commit();
session.close();
System.out.println("ok, " +res);
}
/**
* 更新
* @throws IOException
*/
@Test
public void t2() throws IOException {
//crud
int res = session.update("users.update", new User(1, 23, "updte2", "girl"));
session.commit();
session.close();
System.out.println("ok, "+ res);
}
/**
* 查詢
* @throws IOException
*/
@Test
public void t3() throws IOException {
//crud
User user = session.selectOne("users.selectById", 1);
session.commit();
session.close();
System.out.println("ok");
System.out.println(user);
}
/**
* 刪除
* @throws IOException
*/
@Test
public void t4() throws IOException {
//crud
int res = session.delete("users.delete");
session.commit();
session.close();
System.out.println("ok, "+res);
}
part2: 高階語法(多表關聯查詢)
A, 一個使用者---->多個訂單(每個訂單: 多個產品 ),關係如下, (需求: 查詢出a使用者的所有訂單資訊, 商品資訊 )
<select id="selectOrderListDetailsById" resultMap="map3" >
select orders2.id orderId,
orders2.user_id user_id,
orders2.product_id order_productId,
users2.id userId,
users2.name userName,
users2.sex userSex,
product.id productId,
product.name productName,
product.price productPrice
from users2
left join orders2
on users2.id=orders2.user_id
left join product
on orders2.product_id=product.id
where users2.id=#{id}
</select>
<resultMap id="map3" type="_user">
<id column="userId" property="id" ></id>
<result column="userName" property="name" ></result>
<result column="userSex" property="sex" ></result>
<collection property="listOrders" ofType="_orders" column="userId">
<id column="orderId" property="id" ></id>
<collection property="listProduct" ofType="_product" column="orderId">
<id column="id" property="productId" ></id>
<result column="productName" property="name" ></result>
<result column="productPrice" property="price" ></result>
</collection>
</collection>
</resultMap>