深圳网站制作公司深圳app开发,洪梅镇仿做网站,官网网站页面设计,住房城乡建设部门门户网站就是 ssm 那套#xff0c;在xml 上面写sql
★ 基于SqlSession来实现DAO组件的方式
- MyBatis提供的Starter会自动在Spring容器中配置SqlSession#xff08;其实SqlSessionTemplate实现类#xff09;、并将它注入其他组件#xff08;如DAO组件#xff09;- DAO组件可直接…就是 ssm 那套在xml 上面写sql
★ 基于SqlSession来实现DAO组件的方式
- MyBatis提供的Starter会自动在Spring容器中配置SqlSession其实SqlSessionTemplate实现类、并将它注入其他组件如DAO组件- DAO组件可直接调用SqlSession的方法来操作数据库。- SqlSession调用insert()、update()、delete()、selectList()、selectOne()执行SQL语句时如果SQL语句中没有占位符参数就只要传入第1个参数——该参数代表要执行的SQL语句如果要执行的SQL语句中带一个占位符参数那就传入第2个参数——该参数用于为SQL语句中的占位符参数设置值 。 【无论是用insert、update、delete、selectXxx第一个参数总是指定要执行的SQL语句的名字】。▲ 开发方式 1) 定义映射的对象类非常普通的POJO甚至无需任何注解。2定义DAO接口。3定义DAO实现类该实现类使用SqlSession的方法来操作数据库。4使用XML Mapper文件来定义SQL语句、并为SQL语句指定名字。5配置XML Mapper文件的加载路径。# 指定MyBatis的XML Mapper的加载路径mybatis.mapper-locationsclasspath*:org/crazyit/app/dao/*.xml# 指定为org.crazyit.app.domain下的所有类指定别名别名规则是类名首字母小写mybatis.type-aliases-packageorg.crazyit.app.domainPOJO 即 Plain Old Java Object 就是一个普通平凡的Java对象。 POJOPlain Old Java Object是指普通的Java对象它是一个简单的、基本的Java类没有任何特殊要求或限制。POJO类通常只包含私有字段、公共访问方法getter和setter以及一些自定义的方法。
代码演示
就是 ssm 那套在xml 上面写sql 这个没什么好说的就是比较旧的mybatis
User 类 UserDao 接口 UserDaoImpl 实现类 唯一注意一点的就是如图 该方法 List selectList(String var1, Object var2); 参数是一个 Object所以如果有多个参数要传给 selectList key可以使用 Map 包起来
UserMapper.xml
命名空间对应的时候UseDao
创建和UserDao对应的Mapper文件用来写sql这个idea版本可以这样快速创建
UserDaoTest
测试类
application.properties 完整代码
User
package cn.ljh.app.domain;import lombok.Data;//普通的java类
Data
public class User
{private Integer id;private String name;private String password;private int age;public User(){}public User(Integer id, String name, String password, int age){this.id id;this.name name;this.password password;this.age age;}Overridepublic String toString(){return User{ id id , name name \ , password password \ , age age };}
}
UserDao
package cn.ljh.app.dao;
import cn.ljh.app.domain.User;
import org.apache.ibatis.annotations.*;
import java.util.List;public interface UserDao
{//增int save(User user);//删int deleteById(Integer id);//根据名字模糊查询ListUser findByNameLike(String namePattern);//根据年龄区间进行范围查询ListUser findByAgeBetween(Param(startAge) int startAge, Param(endAge) int endAge);}UserDaoImpl
package cn.ljh.app.dao.impl;import cn.ljh.app.dao.UserDao;
import cn.ljh.app.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;import java.util.List;
import java.util.Map;//作为dao组件把这个类交给容器管理
Repository
public class UserDaoImpl implements UserDao
{private final SqlSession sqlSession;//通过有参构造器进行依赖注入public UserDaoImpl(SqlSession sqlSession){this.sqlSession sqlSession;}//UserMapper.xml 的命名空间private final static String namespace cn.ljh.app.dao.UserDao.;//增Overridepublic int save(User user){//insert 、 delete 、 update 、select 等方法的第一个参数一直都是 SQL 语句的 ID 就是命名空间int insert sqlSession.insert(namespace save, user);return insert;}//删Overridepublic int deleteById(Integer id){int delete sqlSession.delete(namespace deleteById, id);return delete;}//根据名字模糊查询Overridepublic ListUser findByNameLike(String namePattern){ListUser users sqlSession.selectList(namespace findByNameLike, namePattern);return users;}//根据年龄区间进行范围查询Overridepublic ListUser findByAgeBetween(int startAge, int endAge){//该方法E ListE selectList(String var1, Object var2); 参数是一个 Object//所以如果有多个参数要传给 selectList key可以使用 Map 包起来ListUser users sqlSession.selectList(namespace findByAgeBetween,Map.of(startAge, startAge, endAge, endAge));return users;}
}UserMapper.xml
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecn.ljh.app.dao.UserDaoinsert idsaveinsert into user_inf values (null , #{name} , #{password} , #{age})/insertdelete iddeleteByIddelete from user_inf where user_id #{id}/deleteselect idfindByNameLike resultTypeuserselect user_id as id , name , password , age from user_inf where name like #{namePattern}/selectselect idfindByAgeBetween resultTypecn.ljh.app.domain.Userselect user_id as id ,name , password , age from user_inf where age between #{startAge} and #{endAge}/select
/mapperUserDaoTest
package cn.ljh.app;import cn.ljh.app.dao.UserDao;
import cn.ljh.app.domain.User;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;SpringBootTest(webEnvironment SpringBootTest.WebEnvironment.NONE)
public class UserDaoTest
{Autowiredprivate UserDao userDao;//添加user对象ParameterizedTestCsvSource({aa,xxx,2, bb,xxx,3})public void testSave(String name, String password, int age){//没有idsave就是添加int save userDao.save(new User(null, name, password, age));System.err.println(save);}//根据id删除用户对象ParameterizedTestValueSource(ints {17})public void testDelete(Integer id){userDao.deleteById(id);}//根据名字模糊查询ParameterizedTestValueSource(strings {孙%, %精})public void testFindByNameLike(String namePattern){ListUser users userDao.findByNameLike(namePattern);users.forEach(System.err::println);}//根据年龄区间进行范围查询ParameterizedTestCsvSource({15,20, 500,1000})public void testFindByAgeBetween(int startAge, int endAge){ListUser users userDao.findByAgeBetween(startAge, endAge);users.forEach(System.err::println);}
}application.properties
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver
spring.datasource.urljdbc:mysql://localhost:3306/springboot?serverTimezoneUTC
spring.datasource.usernameroot
spring.datasource.password123456# 如果想看到SQL语句输出需要将Mapper组件的日志级别设置为debug
logging.level.cn.ljh.app.daodebug# 指定 MyBatis 的 XML Mapper 的加载路径
mybatis.mapper-locationsclasspath*:cn/ljh/app/dao/*.xml
# 指定为 cn.ljh.app.domain 下的所有类指定别名别名规则是类名首字母小写
# 就是说xml的这个 resultTypeuser
mybatis.type-aliases-packagecn.ljh.app.domainpom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.4.5/version/parentgroupIdcn.ljh/groupIdartifactIdMyBatis_sqlSession/artifactIdversion1.0.0/versionnameMyBatis_sqlSession/namepropertiesjava.version11/java.version/propertiesdependencies!-- 导入 MyBatis 整合 spring boot 的 starter --dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.2.0/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scopeoptionaltrue/optional/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project