文章目錄
- 一,動態SQL
- --1,foreach標簽
- 修改映射檔案
- 修改介面檔案
- 修改測驗類
- 總結
- 二,ResultMap
- --1,概述
- --2,測驗
- 專案結構
- 創建了表,加了記錄
- 修改pom.xml,添加mybatis的jar包
- 創建核心組態檔
- 創建映射檔案
- 創建介面類
- 創建pojo類
- 測驗
- 總結
- 3,優化簡化resultmap
- 第一步:在核心組態檔中開啟駝峰規則:
- 第二步:resultMap標簽中添加新屬性 autoMapping=“true”
- 三,SSM整合
- --0,準備表和資料
- --0,添加mybatis的jar包
- --1,創建前端HTML網頁
- --2,創建啟動類RunApp
- --3,創建組態檔application.yml
- --4,創建pojo類
- --5,創建CarMapper介面
- --6,創建映射檔案CarMapper.xml
- --7,創建CarService介面
- --8,創建CarServiceImpl實作類
- --9,創建CarController類
- --10,測驗
- --11,總結
- 標題
一,動態SQL
–1,foreach標簽

修改映射檔案
<?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">
<!-- namespace=介面的全路徑 -->
<mapper namespace="cn.tedu.dao.DeptMapper">
<!-- 提取SQL片段,提高SQL片段復用性 -->
<sql id="cols">
id,dname,loc
</sql>
<!-- delete from dept where id in(1,2,3)-->
<delete id="delete">
delete from dept where id in(
/*foreach用來完成遍歷
collection表示要遍歷哪種集合里的資料,值是固定值:array/list/Map.key
item表示即將遍歷到的資料,separator是分隔符,#{ids}獲取遍歷到的資料
*/
<foreach collection="array" item="ids" separator=",">
#{ids}
</foreach>
)
</delete>
<!-- 參考SQL片段 -->
<select id="getByName" resultType="Dept">
select
<include refid="cols"></include>
from dept
<if test="dname != null">
where dname=#{dname}
</if>
</select>
<!--id=介面里的方法名-->
<select id="getById" resultType="Dept">
select
<include refid="cols"></include>
from dept where id=1
</select>
<!--新增部門記錄-->
<insert id="save">
insert into dept values(#{id},#{dname},#{loc})
</insert>
</mapper>
修改介面檔案
package cn.tedu.dao;
import cn.tedu.pojo.Dept;
import java.util.List;
//介面的全路徑=映射檔案中namespace的值
//介面的方法名=映射檔案中id的值
public interface DeptMapper {
Dept getById(); //根據id查
List<Dept> getByName(String dname);//根據名字查
void save(Dept dept);//新增部門記錄
void delete(int[] a);//洗掉
}
修改測驗類
package cn.tedu.test;
import cn.tedu.dao.DeptMapper;
import cn.tedu.pojo.Dept;
import cn.tedu.pojo.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.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Test1 {
@Test
public void get() throws IOException {
//讀取組態檔
InputStream in = Resources.getResourceAsStream(
"mybatis-config.xml");
//創建會話工廠
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(in);
//開啟會話,準備執行SQL
SqlSession session = factory.openSession();
//定位SQL(namespace的值.id的值),并執行
//selectOne執行查詢的SQL,并只會回傳一個結果
Object o = session.selectOne("userMapper.getById",2);
//User(id=1, name=hanmeimei, addr=北京, age=28)
System.out.println(o);
//定位SQL(namespace的值.id的值),并執行
//selectList執行查詢的SQL,并回傳多個結果
List<User> list = session.selectList("userMapper.getAll");
for(User u : list){
System.out.println(u);
}
//定位SQL(namespace的值.id的值),并執行,并給SQL傳入引數
User u = session.selectOne(
"userMapper.getByName","xiongda");
System.out.println(u);
//定位SQL(namespace的值.id的值)
// Dept d = session.selectOne("deptMapper.getById");
// System.out.println(d);
//獲取了指定的介面
DeptMapper mapper = session.getMapper(DeptMapper.class);
//呼叫介面里的方法
Dept dd = mapper.getById();
System.out.println(dd);
List<Dept> ds = mapper.getByName(null);
for (Dept d : ds) {
System.out.println(d+"=================");
}
Dept dept = new Dept();
dept.setId(null).setDname("ios開發部").setLoc("上海");
mapper.save(dept);
//mybatis不會自動提交事務,增刪改需要自己提交事務
session.commit();
mapper.delete(new int[]{103,104});
session.commit();
}
}
總結

二,ResultMap
–1,概述
resultType只能完成簡單的ORM,只能完成那些 欄位名 和 屬性名一致的情況
欄位名 和 屬性名 不一樣的情況,resultType必須換成resultMap,否則無法ORM
–2,測驗
專案結構

創建了表,加了記錄
CREATE TABLE `user_info` (
`id` int(11) NOT NULL auto_increment,
`user_name` varchar(20) default NULL,
`user_addr` varchar(20) default NULL,
`user_age` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
修改pom.xml,添加mybatis的jar包
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>cgb2106boot03</artifactId>
<groupId>cn.tedu</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>day19</artifactId>
<dependencies>
<!--mybatis依賴包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!--jdbc依賴包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
</dependencies>
</project>
創建核心組態檔
<?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">
<!-- mybatis的核心組態檔,配置了事務管理,資料源 -->
<configuration>
<!--environments可以配置多個資料庫的連接資訊,default指定默認的環境-->
<environments default="test">
<environment id="test">
<!--使用的事務管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--配置了資料源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb2?characterEncoding=utf8&serverTimezone=Asia/Shanghai" />
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--引入映射檔案-->
<mappers>
<mapper resource="userInfoMapper.xml"></mapper>
</mappers>
</configuration>
創建映射檔案
<?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="cn.tedu.dao.UserInfoMapper">
<!-- 查詢所有 ,欄位名和屬性名不一樣,resultType換成resultMap
resultType="cn.tedu.pojo.UserInfo"
-->
<!-- ORM:是指把欄位的值查到以后 交給 同名屬性保存
使用resultMap: 欄位名 和 屬性名 不一樣
id是唯一標識 type是類的全路徑
-->
<resultMap id="abc" type="cn.tedu.pojo.UserInfo">
<result column="user_name" property="userName"></result>
<result column="user_addr" property="userAddr"></result>
<result column="user_age" property="userAge"></result>
</resultMap>
<!--resultMap屬性是解決了resultType解決不了的問題,參考指定的resultMap-->
<select id="selectList" resultMap="abc">
select * from user_info
</select>
</mapper>
創建介面類
package cn.tedu.dao;
import cn.tedu.pojo.UserInfo;
import java.util.List;
public interface UserInfoMapper {
List<UserInfo> selectList();//查詢所有
}
創建pojo類
package cn.tedu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class UserInfo {
private Integer id;
private String userName;
private String userAddr;
private Integer userAge;
}
測驗
package cn.tedu.test;
import cn.tedu.dao.UserInfoMapper;
import cn.tedu.pojo.UserInfo;
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.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Test1 {
@Test
public void all() throws IOException {
InputStream in = Resources.getResourceAsStream(
"mybatis-config.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(in);
//true表示自動提交事務
SqlSession session = factory.openSession(true);
//獲取指定介面
UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
//呼叫方法
List<UserInfo> list = mapper.selectList();
for (UserInfo uf : list) {
//UserInfo(id=1, userName=null, userAddr=null, userAge=null)
System.out.println(uf);
}
}
}
總結

3,優化簡化resultmap
第一步:在核心組態檔中開啟駝峰規則:
<?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">
<!-- mybatis的核心組態檔,配置了事務管理,資料源 -->
<configuration>
<settings>
<!--開啟駝峰規則,簡化resultMap的撰寫-->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<!--environments可以配置多個資料庫的連接資訊,default指定默認的環境-->
<environments default="test">
<environment id="test">
<!--使用的事務管理器-->
<transactionManager type="JDBC"></transactionManager>
<!--配置了資料源-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb2?characterEncoding=utf8&serverTimezone=Asia/Shanghai" />
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--引入映射檔案-->
<mappers>
<mapper resource="userInfoMapper.xml"></mapper>
</mappers>
</configuration>
第二步:resultMap標簽中添加新屬性 autoMapping=“true”
<?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="cn.tedu.dao.UserInfoMapper">
<!-- 查詢所有 ,欄位名和屬性名不一樣,resultType換成resultMap
resultType="cn.tedu.pojo.UserInfo"
-->
<!-- ORM:是指把欄位的值查到以后 交給 同名屬性保存
使用resultMap: 欄位名 和 屬性名 不一樣
id是唯一標識 type是類的全路徑
autoMapping="true"是開啟了自動駝峰規則的匹配
-->
<resultMap autoMapping="true" id="abc" type="cn.tedu.pojo.UserInfo">
<!-- <result column="user_name" property="userName"></result>
<result column="user_addr" property="userAddr"></result>
<result column="user_age" property="userAge"></result>-->
</resultMap>
<!--resultMap屬性是解決了resultType解決不了的問題,參考指定的resultMap-->
<select id="selectList" resultMap="abc">
select * from user_info
</select>
</mapper>
三,SSM整合

–0,準備表和資料
CREATE TABLE `car` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) default NULL,
`color` varchar(10) default NULL,
`price` double default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
–0,添加mybatis的jar包
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>cgb2106boot03</artifactId>
<groupId>cn.tedu</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>SSM01</artifactId>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
–1,創建前端HTML網頁
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>ssm</title>
</head>
<body>
<a href="http://localhost:8080/car/get">點我請求服務器的資源</a>
</body>
</html>
–2,創建啟動類RunApp
package cn.tedu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//掃描dao層介面檔案所在的包,框架自動生成實作類
@MapperScan("cn.tedu.dao")
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class);
}
}
–3,創建組態檔application.yml
#是一個特殊的檔案,特殊在這個檔案將被springboot框架自動加載-開箱即用
#格式非常嚴格,k: v
#SpringBoot配置mysql資訊
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///mybatisdb?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
#SpringBoot整合Mybatis配置
mybatis:
#指定UserMapper.xml檔案的位置
mapper-locations: classpath:*.xml
#開啟駝峰映射
configuration:
map-underscore-to-camel-case: true
–4,創建pojo類
package cn.tedu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)//lombok的鏈式編程
@Component //ioc
public class Car {
private Integer id;
private String name;
private String color;
private Double price;
}
–5,創建CarMapper介面
package cn.tedu.dao;
import cn.tedu.pojo.Car;
import java.util.List;
@Component//沒有啥意義
public interface CarMapper {
List<Car> selectList(); //查詢所有資料
}
–6,創建映射檔案CarMapper.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">
<!--namespace的值=dao層介面的全路徑-->
<mapper namespace="cn.tedu.dao.CarMapper">
<!--查詢所有資料 id=介面中的方法名-->
<select id="selectList" resultType="cn.tedu.pojo.Car">
select * from car
</select>
</mapper>
–7,創建CarService介面
package cn.tedu.service;
import cn.tedu.pojo.Car;
import java.util.List;
public interface CarService {
List<Car> selectList(); //查詢所有資料
}
–8,創建CarServiceImpl實作類
package cn.tedu.service;
import cn.tedu.dao.CarMapper;
import cn.tedu.pojo.Car;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service //ioc
public class CarServiceImpl implements CarService{
@Autowired //di依賴注解dao層,為了使用dao的功能
private CarMapper mapper;
@Override //查詢所有資料
public List<Car> selectList() {
return mapper.selectList();
}
}
–9,創建CarController類
package cn.tedu.controller;
import cn.tedu.pojo.Car;
import cn.tedu.service.CarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController//相當于@Controller+@ResponseBody
@RequestMapping("car")
public class CarController {
@Autowired //di
private CarService carService ;
//查詢所有資料
@RequestMapping("get")
public List<Car> selectList(){
return carService.selectList() ;
}
}
–10,測驗
打開瀏覽器,訪問服務器
–11,總結

標題
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/294990.html
標籤:其他
