cgb2105-day18 朱雀 2021-09-11 03:12 287阅读 0赞 ### 文章目录 ### * * 一,动态SQL * * \--1,需求 * \--2,开发步骤 * * 创建module * 修改pom.xml * 创建核心配置文件 * 创建Dept类 * 创建映射文件 * 创建测试类 * 二,Mybatis的接口开发 * * 结构 * \--1,修改映射文件,把namespace的值改成接口的全路径 * \--2,创建接口文件 * \--3,创建测试类 * \--4,总结 * 三,整合SSM * * 项目结构 * \--1,准备表和记录 * \--2,创建前端网页 * \--3,创建Module * \--4,修改pom.xml * \--5,创建启动类 * \--5,创建配置文件 * \--6,创建Car类 * \--7,创建CarDao接口 * \--8,创建映射文件 * \--9,创建CarService 接口 * \--10,创建CarServiceImpl实现类 * \--11,创建CarController 类 * \--12,修改启动类,添加包扫描 * \--13,测试 * \--14,总结 * 四,练习SSM * * \--1,修改CarDao接口 * \--2,修改CarMapper.xml * \--3,修改CarService接口 * \--4,修改CarServiceImpl实现类 * \--5,修改CarController * \--6,测试 ## 一,动态SQL ## ### –1,需求 ### 操作dept表 ### –2,开发步骤 ### #### 创建module #### 略。。 #### 修改pom.xml #### <?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>cgb2105boot01</artifactId> <groupId>cn.tedu</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>day18</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> <!--用来设置别名 type是类的全路径 alias是以后要用的别名--> <typeAliases> <typeAlias type="cn.tedu.pojo.Dept" alias="Dept"></typeAlias> </typeAliases> <!--可以配置多个数据库连接的环境,使用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="DeptMapper.xml"></mapper> </mappers> </configuration> #### 创建Dept类 #### package cn.tedu.pojo; public class Dept { private Integer id; private String dname; private String loc ; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public String getLoc() { return loc; } public void setLoc(String loc) { this.loc = loc; } @Override public String toString() { return "Dept{" + "id=" + id + ", dname='" + dname + '\'' + ", loc='" + loc + '\'' + '}'; } } #### 创建映射文件 #### <?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="DeptMapperNS"> <!-- 1. 提取SQL片段,提高复用性--> <sql id="cols"> id,dname,loc </sql> <!--resultType使用了别名,因为在核心配置文件里配过了 --> <select id="getAll" resultType="Dept"> select <include refid="cols"></include> /* 2.使用了指定的SQL片段*/ from dept; </select> <!--查询name=java教研部 的部门信息--> <select id="getByName" resultType="Dept"> select <include refid="cols"></include> from dept /* if用来判断,test写判断条件,满足条件才执行,不满足不执行*/ <if test="dname != null"> where dname = #{dname} </if> </select> <!--查询id是1或者是3的部门信息 /* 可以去除条件中多余的or 或者 and关键字 */ --> <select id="getByIds" resultType="Dept"> select <include refid="cols"></include> from dept <where> <if test="id!=null"> id=#{id} </if> or id=3 </where> </select> <!--删除id是1 2 3 的部门信息--> <delete id="delByIds"> /*delete from dept where id in(1,2,3) 参数写死了,最好动态解析*/ delete from dept where id in( /*foreach用来遍历,collection属性的值是固定值array list map里的key item相当于遍历得到的数据 separator是数据间的分隔符 */ <foreach collection="array" item="i" separator="," > #{i} /*获取了遍历得到的数据*/ </foreach> ) </delete> </mapper> #### 创建测试类 #### package cn.tedu.test; import cn.tedu.pojo.Dept; 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); SqlSession session = factory.openSession(); //执行SQL List<Dept> list = session.selectList("DeptMapperNS.getAll"); for (Dept d : list) { System.out.println(d); } //Mybatis的以及缓存:相同的SqlSession执行相同的SQL时会查缓存不会再次发起SQL了 List<Dept> list2 = session.selectList("DeptMapperNS.getAll"); for (Dept d : list2) { System.out.println(d); } //selectList(1,2)--1是SQL的定位2是SQL需要的参数 List<Dept> list1 = session.selectList("DeptMapperNS.getByName", null); for (Dept d : list1) { System.out.println(d); } //selectList(1,2)--1是SQL的定位2是SQL需要的参数 List<Dept> list3 = session.selectList("DeptMapperNS.getByIds",null); for (Dept d : list3) { System.out.println(d); } int[] a = { 1,2,3}; session.delete("DeptMapperNS.delByIds",a);//给SQL传入多个参数 //Mybatis不会自动提交事务,需要手动提交:openSession(true)或者commit() session.commit();//增删改都需要提交事务,不然对数据库没有持久性的影响 System.out.println("删掉了"); } } ## 二,Mybatis的接口开发 ## ### 结构 ### ![在这里插入图片描述][20210720144514447.png] ### –1,修改映射文件,把namespace的值改成接口的全路径 ### <?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.DeptDao"> <!-- 1. 提取SQL片段,提高复用性--> <sql id="cols"> id,dname,loc </sql> <!--resultType使用了别名,因为在核心配置文件里配过了 --> <select id="getAll" resultType="Dept"> select <include refid="cols"></include> /* 2.使用了指定的SQL片段*/ from dept; </select> <!--查询name=java教研部 的部门信息--> <select id="getByName" resultType="Dept"> select <include refid="cols"></include> from dept /* if用来判断,test写判断条件,满足条件才执行,不满足不执行*/ <if test="dname != null"> where dname = #{dname} </if> </select> <!--查询id是1或者是3的部门信息 /* 可以去除条件中多余的or 或者 and关键字 */ --> <select id="getByIds" resultType="Dept"> select <include refid="cols"></include> from dept <where> <if test="id!=null"> id=#{id} </if> or id=3 </where> </select> <!--删除id是1 2 3 的部门信息--> <delete id="delByIds"> /*delete from dept where id in(1,2,3) 参数写死了,最好动态解析*/ delete from dept where id in( /*foreach用来遍历,collection属性的值是固定值array list map里的key item相当于遍历得到的数据 separator是数据间的分隔符 */ <foreach collection="array" item="i" separator="," > #{i} /*获取了遍历得到的数据*/ </foreach> ) </delete> </mapper> ### –2,创建接口文件 ### 接口文件的全路径 = Mapper.xml里namespace的值 接口中的方法名 = Mapper.xml里的SQL的id值 接口中的方法的返回值 = Mapper.xml里的SQL的resultType值 package cn.tedu.dao; import cn.tedu.pojo.Dept; import java.util.List; //接口文件的全路径 = Mapper.xml里namespace的值 public interface DeptDao { /** * 获取所有 * @return 所有部门信息 */ List<Dept> getAll(); /** * 根据名称获取部门信息 * @return 相关名字的部门信息 */ List<Dept> getByName(String name); List<Dept> getByIds(int[] id); void delByIds(int[] ids); } ### –3,创建测试类 ### package cn.tedu.test; import cn.tedu.dao.DeptDao; import cn.tedu.pojo.Dept; 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 Test2 { @Test public void get() throws IOException { //加载核心配置文件 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); //创建会话工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); //创建会话 SqlSession session = factory.openSession(); //获取指定的接口 DeptDao dao = session.getMapper(DeptDao.class); //调用接口里的方法 List<Dept> list = dao.getAll(); for (Dept dept : list) { System.out.println(dept); } //根据名称获取部门信息 List<Dept> list2 = dao.getByName("开发"); for (Dept dept : list2) { System.out.println(dept); } } } ### –4,总结 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70] ## 三,整合SSM ## ### 项目结构 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 1] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 2] ### –1,准备表和记录 ### CREATE TABLE `car` ( `id` int(11) NOT NULL auto_increment, `name` varchar(20) default NULL, `color` varchar(20) default NULL, `price` double default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ### –2,创建前端网页 ### <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>测试 框架整合</title> </head> <body> <a href="http://localhost:8080/car/get">点我提交请求</a> </body> </html> ### –3,创建Module ### 略 ### –4,修改pom.xml ### <?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>cgb2105boot01</artifactId> <groupId>cn.tedu</groupId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>SSM01</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> ### –5,创建启动类 ### package cn.tedu; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class RunApp { public static void main(String[] args) { SpringApplication.run(RunApp.class); } } ### –5,创建配置文件 ### #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: #加载resources下面的映射文件,如:UserMapper.xml文件的位置 mapper-locations: classpath:*.xml #开启驼峰映射 configuration: map-underscore-to-camel-case: true ### –6,创建Car类 ### package cn.tedu.pojo; import org.springframework.stereotype.Component; //用来完成ORM,也是Model层,用来封装数据 @Component//ioc public class Car { private Integer id; private String name; private String color; private Double price; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } @Override public String toString() { return "Car{" + "id=" + id + ", name='" + name + '\'' + ", color='" + color + '\'' + ", price=" + price + '}'; } } ### –7,创建CarDao接口 ### package cn.tedu.dao; import cn.tedu.pojo.Car; import java.util.List; public interface CarDao { List<Car> get();//获取所有数据 } ### –8,创建映射文件 ### <?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的值是CarDao接口的全路径--> <mapper namespace="cn.tedu.dao.CarDao"> <!--id的值是接口中的方法名 resultType是接口中方法的返回值类型--> <select id="get" resultType="cn.tedu.pojo.Car"> select * from car </select> </mapper> ### –9,创建CarService 接口 ### package cn.tedu.service; import cn.tedu.pojo.Car; import java.util.List; public interface CarService { List<Car> get();//获取所有数据 } ### –10,创建CarServiceImpl实现类 ### package cn.tedu.service; import cn.tedu.dao.CarDao; import cn.tedu.pojo.Car; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.util.List; @Service//ioc public class CarServiceImpl implements CarService{ @Autowired//di private CarDao dao; //获取所有数据 @Override public List<Car> get() { return dao.get(); } } ### –11,创建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 @RequestMapping("car") public class CarController { @Autowired //di private CarService carService; @RequestMapping("get") public List<Car> get() { //直接使用了service的功能 return carService.get() ; } } ### –12,修改启动类,添加包扫描 ### package cn.tedu; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("cn.tedu.dao")//扫描dao接口所在的包 public class RunApp { public static void main(String[] args) { SpringApplication.run(RunApp.class); } } ### –13,测试 ### ![在这里插入图片描述][20210720170534716.png] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 3] ### –14,总结 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 4] ## 四,练习SSM ## ### –1,修改CarDao接口 ### package cn.tedu.dao; import cn.tedu.pojo.Car; import org.springframework.stereotype.Component; import java.util.List; @Component public interface CarDao { List<Car> get();//获取所有数据 void add(Car c);//添加方法 } ### –2,修改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的值是CarDao接口的全路径--> <mapper namespace="cn.tedu.dao.CarDao"> <!--id的值是接口中的方法名 resultType是接口中方法的返回值类型--> <select id="get" resultType="cn.tedu.pojo.Car"> select * from car </select> <insert id="add"> insert into car values(null,#{name},#{color},#{price}) </insert> </mapper> ### –3,修改CarService接口 ### package cn.tedu.service; import cn.tedu.pojo.Car; import java.util.List; public interface CarService { List<Car> get();//获取所有数据 void add(Car c);//添加方法 } ### –4,修改CarServiceImpl实现类 ### package cn.tedu.service; import cn.tedu.dao.CarDao; import cn.tedu.pojo.Car; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.util.List; @Service//ioc public class CarServiceImpl implements CarService{ @Autowired//di private CarDao dao; @Override //新增业务 public void add(Car c) { dao.add(c); } //获取所有数据 @Override public List<Car> get() { return dao.get(); } } ### –5,修改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 @RequestMapping("car") public class CarController { @Autowired //di private CarService carService; //新增业务 //http:localhost:8080/car/add?id=10&name=BMW&color=gray&price=10 @RequestMapping("add") public void add(Car c) { System.out.println(c); //直接使用了service的功能 carService.add(c); } @RequestMapping("get") public List<Car> get() { //直接使用了service的功能 return carService.get() ; } } ### –6,测试 ### ![在这里插入图片描述][20210720174835581.png] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 5] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 6] [20210720144514447.png]: /images/20210911/54d4ed040356473799ed09fcd7261a04.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70]: /images/20210911/eb1efdb2b656443fb3c9015474cdd32a.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 1]: /images/20210911/141992af563c43cf9f7c4eae82a747a0.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 2]: /images/20210911/245fac9c61f743978f4bdb4bfe013340.png [20210720170534716.png]: /images/20210911/d874564a37b54e8db1ac9ca5a86ad08d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 3]: /images/20210911/b89b0c537c114a3582652f9e48c8ac2a.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 4]: /images/20210911/bed9a032d6ed4056bf77728f6a97097e.png [20210720174835581.png]: /images/20210911/7e90e27584ed4a56917d945f6a66e696.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 5]: /images/20210911/bcef097a32b34854870442c38f0d0980.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTI5MzI4NzY_size_16_color_FFFFFF_t_70 6]: /images/20210911/dcad7d25ee464e299938b01ebf4df0af.png
相关 cgb2105-day12 文章目录 一,Spring Boot \--1,创建Spring Boot项目 \--2,配置maven ╰半橙微兮°/ 2021年09月11日 03:10/ 0 赞/ 329 阅读
相关 cgb2105-day09 文章目录 一,js的语句 二,js的数组 三,js的函数 四,Maven \--1,创建Mave 心已赠人/ 2021年09月11日 03:04/ 0 赞/ 352 阅读
相关 cgb2105-day08 文章目录 一,模拟 服务器 解析浏览器发来的数据 二,CSS选择器 三,练习HTML和CSS \--1,创建c 谁践踏了优雅/ 2021年09月11日 03:04/ 0 赞/ 293 阅读
还没有评论,来说两句吧...