当前位置: 首页 > news >正文

黑龙江做网站哪家好免费学习网

黑龙江做网站哪家好,免费学习网,做网站的人叫什么软件,做试客需要去哪些网站文章目录 前言注解方式书写 MyBatis打印 MyBatis 日志参数传递MyBatis 增加操作返回主键 MyBatis 删除操作MyBatis 修改操作MyBatis 查找操作1. 对查询结果进行别名2. Results注解3. 开启驼峰命名#xff08;推荐#xff09; XML 配置文件方法书写 MyBatis配置数据库的相关配… 文章目录 前言注解方式书写 MyBatis打印 MyBatis 日志参数传递MyBatis 增加操作返回主键 MyBatis 删除操作MyBatis 修改操作MyBatis 查找操作1. 对查询结果进行别名2. Results注解3. 开启驼峰命名推荐 XML 配置文件方法书写 MyBatis配置数据库的相关配置指定XML的文件路径xml 实现增加操作删除操作修改操作查找操作1. 别名2. 定义 result3. 开启驼峰命名 前言 前面我们学习了什么是 MyBatis为什么要使用 MyBatis如何创建 MyBatis 环境并且了解了使用单元测试对代码功能进行测试。那么今天这篇文章将为大家分享关于 MyBatis 的基础操作。 书写 MyBatis 的方法有两种注解和XML的方法这里我们两种方法都是给大家写到。 注解方式书写 MyBatis 打印 MyBatis 日志 前面文章中也提到了日志对于我们开发人员的重要性在使用 MyBatis 框架的过程中我们同样也可以看到执行 MyBatis 代码的过程中产生的日志。 那么如何打印出 MyBatis 日志呢我们需要在配置文件中添加配置项来告知 Spring我们需要知道 MyBatis 代码执行过程中产生的日志。 mybatis:configuration: # 配置打印 MyBatis⽇志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl添加这个配置了之后我们在启动项目就会发现MyBatis 执行过程中的日志就可以看到了。 参数传递 假设我们需要查询 id 为 4 的用户的信息的时候对应的 SQL 语句就是 select * from userinfo where id4;对应到我们的 MyBatis 就是这样的。 Select(select * from userinfo where id4) public UserInfo getById();但是可以发现这样写 SQL 语句的话这个查询的条件就写死了那么是否有一种方法可以根据我们用户传递的参数查询指定条件的数据呢答案是可以的这就需要用到 MyBatis 中参数传递的知识了。 MyBatis 中使用 #{} 来获取方法中的参数当我们调用这个方法并且传入参数的时候通过这个 #{} 就能将传递过来的参数给 SQL 语句。 Select(select * from userinfo where id#{id}) public UserInfo getById1(int id);Test void getById1() {UserInfo userInfo userInfoMapper.getById1(3);log.info(userInfo.toString()); }如果 mapper 接口类型的方法只有一个普通类型的参数#{…}里面的属性名可以随便写但是还是建议和参数名保持一致。 Select(select * from userinfo where id#{userid}) public UserInfo getById1(Integer id);当然如果我们觉得方法参数的名字不好的话我们也可以使用 Param 对方法的参数进行重命名但是如果使用 Param 对参数进行重命名的话#{…}里面的属性名必须和别名是相同的。 Select(select * from userinfo where id#{userid}) public UserInfo getById1(Param(userid) Integer id);Select(select * from userinfo where id#{id}) public UserInfo getById1(Param(userid) Integer id);MyBatis 增加操作 数据库的主要操作无非就是增删改查那么我们使用 MyBatis 如何实现数据库的增删改查呢 MyBatis 增加操作需要使用到 Insert 注解。 Insert(insert into userinfo (username, password, age, gender, phone) values (#{username}, #{password}, #{age}, #{gender}, #{phone})) public Integer insert(UserInfo userInfo);Test void insert() {UserInfo userInfo new UserInfo();userInfo.setUsername(小美);userInfo.setPassword(小美);userInfo.setAge(18);userInfo.setGender(2);userInfo.setPhone(3139812381);int ret userInfoMapper.insert(userInfo);log.info(ret 行被更新); }这里可以选择将插入的数据封装成Java对象作为参数传入也可以将这每个些信息当成一个参数进行传递。当以Java对象的形式作为参数进行传递的话Java对象中的属性名需要保持和数据库中的列名相同因为当传递的参数是对象的话MyBatis 会进入到这个对象中查看这个对象中的属性然后与数据库中的列名做比较如果相同就将Java对象中属性的值代入 SQL 语句中不相同则不带入。 返回主键 Insert 语句默认返回的是受影响的行数如果我们需要只需要将方法的返回类型声明为 int/Integer 就可以了如果不需要就将方法的返回类型声明为 void。 但是有些时候我们不仅仅需要 insert 语句影响的行数可能还需要获取到其他的信息比如自增主键的值那么我们如何获取到 insert 之后自增主键的值呢如果我们直接拿到Java对象中与自增主键列同名的属性能拿到吗 log.info(ret 行被更新 userInfo.getId());按理来说这个自增主键应该是 5 了但是拿到的确实 0说明这个还是初始值那么应该进行什么操作才能拿到这个 insert 的一行的自增主键的值呢 如果想要拿到自增主键的值需要在 Mapper 接口的方法上添加一个 Options 注解。 Options(useGeneratedKeys true, keyProperty id) Insert(insert into userinfo (username, password, age, gender, phone) values (#{username}, #{password}, #{age}, #{gender}, #{phone})) public Integer insert(UserInfo userInfo);useGeneratedKeys这会令 MyBatis 使⽤ JDB 的 getGeneratedKeys ⽅法来取出由数据库内部⽣成的主键⽐如像 MySQL 和 SQL Server 这样的关系型数据库管理系统的⾃动递增字段默认值falsekeyProperty指定能够唯⼀识别对象的属性MyBatis 会使⽤ getGeneratedKeys 的返回值或 insert 语句的 selectKey ⼦元素设置它的值默认值未设置unset useGeneratedKeys 参数是是否需要使用到自增主键然后 keyProperty 参数表示将获取到的自增主键的值赋值给 Java 的哪个属性因为这里我们传递的参数是 Java 对象所以当获取到 insert 插入的那行的自增主键赋值给 id 之后MyBatis 就会去这个对象的属性去找有没有 id 这个属性如果有就赋值给它。如果传递的参数是多个普通类型参数的话那么 MyBatis 就会在这些传递的参数中找看是否有相同名称的参数然后赋值给它。 因为我这里为大家演示的时候多次插入了所以获取到的自增主键的值是8这影响不大我们关键看是否 insert 插入的这行的自增主键赋值给了 userInfo 对象中的 id 属性。 如果传递的是对象并且在接收参数的时候对这个参数进行了重命名的话SQL 中的 #{} 参数就需要指定是哪个引用的哪个属性。 Options(useGeneratedKeys true, keyProperty id) Insert(insert into userinfo (username, password, age, gender, phone) values (#{user.username}, #{user.password}, #{user.age}, #{user.gender}, #{user.phone})) public Integer insert(Param(user) UserInfo userInfo);MyBatis 删除操作 使用 MyBatis 进行删除数据的操作需要使用到 Delete 注解。 Delete(delete from userinfo where id#{id}) public void delete(Integer id);Test void delete() {userInfoMapper.delete(1); }MyBatis 修改操作 MyBatis 实现修改操作需要使用到 Update 注解。 Update(update userinfo set gender#{gender} where id#{id}) public void update(Integer gender, Integer id);Test void update() {userInfoMapper.update(0, 8); }MyBatis 查找操作 查询操作不就是 select 吗还有什么需要讲的吗 通过前面的查询我们可以发现我们 Java 的 userInfo 对象中的 deleteFlag createTime updateTime 都是初识值也就是说这些属性并没有被赋值那么这是为什么呢我的 select SQL 语句不是查询出结果了吗 还记得我们前面说了什么吗需要保证 Java 中的属性名和数据库表中的列名保持一致因为当 select 查询出结果之后MyBatis 会根据方法的返回值类型如果是普通类型的话并且 select 查询出来的结果的类型和方法返回值的类型相同的话那么就会直接将这个查询出来的结果进行返回但是如果方法返回值的类型是 Java 对象的话MyBatis 会将查询出来的结果按照列名与 Java 对象中的属性名进行匹配如果相同就赋值给这个属性没有相同的属性名那么 Java 对象的这个属性就是初始值。 虽然保证数据库表中的列名和 Java 对象中的属性名保持一致很重要但是由于 SQL 和 Java 的变量名命名规则和习惯存在差异比如在 SQL 中deletflg 就是这样表示——delete_flag而在 Java 中是以小驼峰的习惯进行命名也就是——deleteFlag那么这样的话就无法保证名称一致了那么这样该怎么办呢有三种解决方法 1. 对查询结果进行别名 前面我们学习 SQL 的时候肯定学过对查询结果进行重命名吧我们可以将列名与Java属性名不相同的列进行重命名。 Select(select id, username, password, age, gender, delete_flag as deleteFlag, create_time as createTime, update_time as updateTime from userinfo) public ListUserInfo selectAll1();Test void selectAll1() {ListUserInfo list userInfoMapper.selectAll1();log.info(list.toString()); }2. Results注解 Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) public interface Results {String id() default ;Result[] value() default {}; }Results 注解的参数有两个一个是 String 类型这个参数的用法稍后给大家讲第二个参数就是 Result[] 一个数组数组中的每个元素都是一个 Result 类型而 Result 中也有很多参数但是这里我们主要用到两个 Results(value {Result(column delete_flag, property deleteFlag),Result(column create_time, property createTime),Result(column update_time, property updateTime)}) Select(select id, username, password, age, gender, delete_flag, create_time, update_time from userinfo) public ListUserInfo selectAll2();Test void selectAll2() {ListUserInfo list userInfoMapper.selectAll1();log.info(list.toString()); }如果我们又想根据给定的 id 进行查询的话因为表的列名和Java的属性名不同那么是否又需要写跟上面一样的 Results 注解吗不是的这就需要用到 Results 注解的第一个参数了通过指定 Results 的第一个参数可以使得这个 Results 注解可以重复使用。 Results(id BaseMap, value {Result(column delete_flag, property deleteFlag),Result(column create_time, property createTme),Result(column update_time, property updateTime) })如果后面的方法也想使用和这个 Results 注解相同的配置的话只需要在方法上加上 ResultMap 注解就可以了。 ResultMap(BaseMap) Select(select id, username, password, age, gender, delete_flag, create_time, update_time from userinfo where id#{id}) public UserInfo getById2(Integer id);这个 ResultMap 中的参数需要保证和 Results 注解中的第一个参数 id 的值保持一致才可以使用该 Results 的相同配置。 3. 开启驼峰命名推荐 通常数据库列使⽤蛇形命名法进⾏命名(下划线分割各个单词)⽽ Java 属性⼀般遵循驼峰命名法约定。为了在这两种命名⽅式之间启⽤⾃动映射需要将 mapUnderscoreToCamelCase 设置为 true。 mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰⾃动转换当在配置文件添加这个配置之后我们再试一次看看结果 Select(select * from userinfo) public ListUserInfo selectAll3();Test void selectAll3() {ListUserInfo list userInfoMapper.selectAll3();log.info(list.toString()); }可以发现通过在配置文件中添加配置从而解决 SQL 和 Java 命名规则不同而导致的问题非常的方便所以也建议大家使用这个做法。 XML 配置文件方法书写 MyBatis 配置数据库的相关配置 不管使用什么方法书写 MyBatis首先就是需要配置数据库相关的信息这里 XML 配置数据库信息的方式跟注解配置数据库的方式是一样的我这里就不过多介绍了。 # 数据库连接配置 spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncodingutf8useSSLfalseusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driver指定XML的文件路径 当配置完成数据库相关配置之后还需要指定我们的 MyBatis XML 的文件路径。 mybatis:mapper-locations: classpath:mapper/**Mapper.xml这个路径在我们的项目中这样显示 classpath 就是我们项目的 resources 文件夹mapper 是我们自己创建的用来操作 MyBatis 的文件夹这个文件夹中存放的都是 xml 文件而这个配置中的 **Mapper.xml 则表示所有以 Mapper.xml 结尾的文件如果想表示以 .xml 结尾的文件则用 **.xml 来表示。通常我们的操作 MyBatis 的 XML 文件都是以 Mapper.xml 作为后缀。这里的 mapper 文件夹和 **Mapper.xml 都是程序员自定义的只要能够对上就可以了。 xml 实现 首先我们需要在 xml 文件中添加固定格式 ?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper mapper namespacecom.example.mybatis20231226.Mapper.UserInfoXMLMapper/mapper这里 namespace 中的值是我们的要实现的接口的全限定类名。 这里的接口就正常写主要的操作在我们的 xml 文件中。 package com.example.mybatis20231226.Mapper;import com.example.mybatis20231226.Model.UserInfo; import org.apache.ibatis.annotations.Mapper;import java.util.List;Mapper public interface UserInfoXMLMapper {public ListUserInfo selectAll(); } 后面的实现就是写在 mapper 标签中的假设我们这里还是查询就可以这样写 mapper namespacecom.example.mybatis20231226.Mapper.UserInfoXMLMapperselect idselectAll resultTypecom.example.mybatis20231226.Model.UserInfoselect * from userinfo/select /mapperid 参数指定要实现的接口中的方法名称resultType 指定该方法的返回的数据的类型的路径这里不是 List而是 List 中的元素的类型 UserInfo。 Slf4j SpringBootTest class UserInfoXMLMapperTest {Autowiredprivate UserInfoXMLMapper userInfoXMLMapper;Testvoid selectAll() {ListUserInfo list userInfoXMLMapper.selectAll();log.info(list.toString());} }增加操作 public Integer insert(UserInfo userInfo);insert idinsertinsert into userinfo (username, password, age, gender, phone)values(#{username}, #{password}, #{age}, #{gender}, #{phone}) /insertTest void insert() {UserInfo userInfo new UserInfo();userInfo.setUsername(小帅);userInfo.setPassword(小帅);userInfo.setAge(28);userInfo.setGender(1);userInfo.setPhone(31737137128);int ret userInfoXMLMapper.insert(userInfo);log.info(ret 被更新); }获取插入数据的自增主键 要想获取到插入数据的自增主键需要在 insert 标签中配置 userGenerateKeys 参数和 keyProperty 参数。 insert idinsert useGeneratedKeystrue keyPropertyidinsert into userinfo (username, password, age, gender, phone)values(#{username}, #{password}, #{age}, #{gender}, #{phone}) /insert别名 xml 别名的操作和使用注解的操作是类似的。 public Integer insert(Param(user) UserInfo userInfo);insert idinsert useGeneratedKeystrue keyPropertyidinsert into userinfo (username, password, age, gender, phone)values(#{user.username}, #{user.password}, #{user.age}, #{user.gender}, #{user.phone}) /insert删除操作 public void delete(Integer id);delete iddeletedelete from userinfo where id#{id} /deleteTest void delete() {userInfoXMLMapper.delete(2); }修改操作 public void update(Integer gender, Integer id);update idupdateupdate userinfo set gender#{gender} where id#{id} /updateTest void update() {userInfoXMLMapper.update(0, 3); }查找操作 这里也是主要为了解决 SQL 命名规则和 Java 命名规则不同导致的问题解决方法和通过注解是一样的。 1. 别名 public ListUserInfo selectAll2();select idselectAll2 resultTypecom.example.mybatis20231226.Model.UserInfoselect id, username, password, age, gender, delete_flag as deleteFlag,create_time as createTime, update_time as updateTime from userinfo /selectTest void selectAll2() {ListUserInfo list userInfoXMLMapper.selectAll1();log.info(list.toString()); }2. 定义 result public ListUserInfo selectAll1();resultMap idXmlBaseMap typecom.example.mybatis20231226.Model.UserInfoid columnid propertyid/idresult columndelete_flag propertydeleteFlag/resultresult columncreate_time propertycreateTime/resultresult columnupdate_time propertyupdateTime/result /resultMapselect idselectAll1 resultMapXmlBaseMapselect * from userinfo /selectid标签用于标识主键列和Java对象的对应关系result标签则用于标识非主键列和Java对象的对应关系 Test void selectAll1() {ListUserInfo list userInfoXMLMapper.selectAll1();log.info(list.toString()); }3. 开启驼峰命名 这个和前面注解的做法是一样的都是在配置文件中讲驼峰转换的配置的值设置为 true 就可以了。 mybatis:configuration:map-underscore-to-camel-case: true #配置驼峰⾃动转换
http://www.dnsts.com.cn/news/73096.html

相关文章:

  • 纯html5 网站网商之窗登录
  • 如何建网站保定东道设计地址
  • 网站优化培训学校房价即将迎来大涨
  • 罗湖网站定制价格合理的网站建设
  • 宁夏区建设厅网站网站建设推荐信息
  • 西安建设工程交易网站网站开发及设计
  • 网站开发公司比较有名第一ppt官网入口
  • angular2做的网站有wordpress手机端网站模板下载
  • 网站的建设目标文档查询系统入口
  • 兰州网站建设公做网站上海
  • 网站推广的主要方法有哪些?一般网站的优缺点
  • 上海网站建设技术指导公司做包装盒效果图的网站
  • 做网站的流程百科网站空间租用协议
  • 做手机版网站和做app差别北太平桥网站建设
  • 建设银行网站怎么登陆不鞍山做网站公司
  • 沭阳金地建设网站网站icp查询系统
  • 网站开发公司 广告词线上推广方法有哪些
  • iis 多网站资讯网站策划怎么写
  • 做个网站得投入多少网络营销试题库及答案
  • 以net结尾的网站高仿网站源码
  • 经开区网站建设服装网站建设策划书可行性分析
  • 化妆品网站栏目设计wordpress 随机文章
  • 小学校园文化建设网站临沂网站建设和轶件安装
  • 网站接入商查询浙江人才网
  • 之梦与wordpress哪个好用浙江短视频seo优化网站
  • seo 网站淄博做网站建设公司
  • 公司的 SEO与网站建设聊城做网站的公司
  • 用电脑做网站的历史在哪里找长治推广型网站开发
  • 网站开发的软件环境网站建设好后如何连接服务器
  • 咸阳个人兼职网站建设国家建筑标准设计网