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

利用小程序反向做网站圣都装饰的口碑怎么样

利用小程序反向做网站,圣都装饰的口碑怎么样,餐饮品牌设计方案,简单网站开发项目实例Mybatis 简介 问题与解决方案 原始jdbc开发存在的问题: 数据库连接、创建、释放频繁造成系统资源浪费从而影响系统性能sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码查询操作时&a…

Mybatis 简介

问题与解决方案

  • 原始jdbc开发存在的问题:
    • 数据库连接、创建、释放频繁造成系统资源浪费从而影响系统性能
    • sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码
    • 查询操作时,需要手动将结果集中的数据手动封装到实体中。查询操作时,需要手动将实体的数据设置到sql语句的占位符位置
  • 应对上述问题给出的解决方案:
    • 使用数据库连接池初始化连接资源
    • 将sql语句抽取到xml配置文件
    • 使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射

什么是Mybatis?

  • mybatis 是一个优秀的基于java的持久层(Dao)框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程
  • mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句
  • 最后 mybatis 框架执行sql 并将结果映射为java对象并返回。采用ORM(对象关系映射)思想解决了实体和数据库映射问题,对jdbc进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作

Mybatis快速入门

开发步骤:
  1. 添加Mybatis的坐标(不用maven,直接添加Mybatis相关jar包)
  2. 创建数据表(数据库中的表格,已有不用创建)
  3. 编写实体类(需要一个实体类来接收数据,有则需要)
  4. 编写映射文件xxxMapper.xml
  5. 编写核心文件SqlMapConfig.xml
  6. 编写测试类
映射文件xxxMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- ↑↑ 引用文件标注 ↑↑ --><!-- 配置命名空间,可以配置多个命名空间 -->
<mapper namespace="userMapper"><!--id:设置命名空间中的id,每个id代表着一个方法resultType:指定返回对象的类型,该类型应为实体类
--><select id="findAll" resultType="com.DemoTestNode.entityClass.User"><!-- 存放该方法中包含的sql语句 -->select * from person</select>
</mapper>
核心文件SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- ↑↑ 引用文件标注 ↑↑ --><configuration><environments default="developemnt"><!-- 配置标识名 --><environment id="developemnt"><!-- 事务类型管理设置 --><transactionManager type="JDBC"></transactionManager><!-- 配置数据源 --><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test_1"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 设置映射文件路径,这样在配置核心文件时也能够一并将映射文件配置 --><mappers><mapper resource="com/DemoTestNode/mapper/UserMapper.xml"></mapper></mappers></configuration>
编写测试类
@Test
public void test1() throws IOException {// 获取核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");// 获得session工厂对象SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);// 获得session回话对象SqlSession sqlSession = build.openSession();// 执行操作 。 参数:namespace . idList<User> userList = sqlSession.selectList("userMapper.findAll");System.out.println(userList);// 释放SessionsqlSession.close();}

Mybatis 上手

插入操作

@Test
public void test2() throws IOException {// 编写实体类User user = new User();user.setName("张老三");user.setSex(19);InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = build.openSession();// 在执行更新操作时,需要传递类int changeRows = sqlSession.insert("userMapper.addUser", user);// 当 mybatis 执行更新操作时 必须提交事务才可以对数据库的结果产生影响sqlSession.commit();sqlSession.close();}
<select id="addUser" parameterType="com.DemoTestNode.entityClass.User">insert into person values(null ,#{name},#{sex})
</select>
插入操作注意问题
  • 插入语句使用insert标签
  • 在映射文件中使用parmeterType属性指定要插入的数据类型
  • sql 语句中使用#{实体属性名}方式引用实体中的属性值
  • 插入操作使用的api是sqlSession.insert(“命名空间.id”,实体类型对象);
  • 插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务
    • 即:sqlSession.commit();

修改操作

@Test
public void test3() throws IOException {User user = new User();user.setId(104);user.setName("王老吉");user.setSex(80);// 获取核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = build.openSession();int changeRows = sqlSession.update("userMapper.updateUser",user);// 当 mybatis 执行更新操作时 必须提交事务才可以对数据库的结果产生影响sqlSession.commit();System.out.println(changeRows);sqlSession.close();
}
<update id="updateUser" parameterType="com.DemoTestNode.entityClass.User">update person set name=#{name},sex=#{sex} where id=#{id}
</update>
修改操作需要注意的问题
  • 修改语句使用update标签
  • 修改操作使用的API是sqlSession(“命名空间.id”,实体对象);

删除操作

@Test
public void test4() throws IOException {// 获取核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = build.openSession();int changeRows = sqlSession.delete("userMapper.delUser",104);// 当 mybatis 执行更新操作时 必须提交事务才可以对数据库的结果产生影响sqlSession.commit();System.out.println(changeRows);sqlSession.close();
}
<delete id="delUser" parameterType="java.lang.Integer">delete from person where id=#{id}<!-- 因为只有一个参数,所以#{}中的内容写什么都可以 -->
</delete>
删除操作需要注意的问题:
  • 删除语句使用delete标签
  • sql语句使用#{任意字符串}方式引用传递的单个参数
  • 删除操作使用的API是sqlSession.delete(“命名空间.id”,Object)

查询操作

// 查询全部
@Test
public void test1() throws IOException {// 获取核心配置文件InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");// 获得session工厂对象SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);// 获得session回话对象SqlSession sqlSession = build.openSession();// 执行操作 。 参数:namespace . idList<User> userList = sqlSession.selectList("userMapper.findAll");System.out.println(userList);sqlSession.close();
}// 查询单个
@Test
public void test0() throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = build.openSession();User user = sqlSession.selectOne("userMapper.findOne", 1);System.out.println(user.getName());sqlSession.close();
}

配置文件概述:

MyBatis核心配置文件层级关系:

  • configuration 配置:
    • properties 属性
    • settings 设置
    • typeAllases 类型别名
    • typeHandlers 类型处理器
    • objectFactory 对象工厂
    • plugins 插件
    • environments 环境
      • environment 环境变量
        • transactionManager 事务管理器
        • dataSource 数据源
    • databaseIdProvider 数据库厂商表示
    • mappers 映射器

environments 标签

  • 数据库环境的配置,支持多环境配置
<environments default="developemnt"><!-- 指定默认环境名称 --><environment id="developemnt"><!-- 指定当前环境的名称 --><transactionManager type="JDBC"></transactionManager><!--指定事务管理类型--><dataSource type="POOLED"><!-- 指定当前数据源类型是链接池 --><!-- 数据源配置 -->    <property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test_1"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment>
</environments>

environment 标签

  • 其中事务管理器(transactionManager)类型有两种:
    • JDBC:这个配置就是直接使用JDBC回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
    • MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个声明周期(比如JEE应用服务器的上下文)。默认情况它会关闭连接,因此需要将closeConnection属性设置为false来阻止它的关闭行为
  • 其中,数据源(dataSource)类型有三种:
    • UNPOOLED:这个数据源的实现知识每次被请求时打开和关闭连接
    • POOLED:这种数据源的实现利用 “池” 的概念将JDBC连接对象组织起来
    • JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置在 JNDI 上下文的引用

Mappers 标签

  • 该标签的作用是加载映射的。
<mappers><mapper resource="com/DemoTestNode/mapper/UserMapper.xml"></mapper>
</mappers>
  • 加载方式有如下几种:
    • 使用相对于类路径的资源引用,例如:<mapper resource="">
    • 使用完全限定资源定位符(URL),例如:<mapper url="">
    • 使用映射器接口实现类的完全限定类名,例如:<mapper class="">
    • 将包内的映射器接口实现全部注册为映射器,例如:<package name="">

properties 标签

<properties resource="指定properties文件"></properties>

typeAliases 标签

  • 设置别名

  • 在Mybatis中,已经存在了很多别名,例如基本的数据类型

<typeAliases><typeAlias type="com.DemoTestNode.entityClass.User" alias="user"></typeAlias>
</typeAliases>
SqlSession工厂构建器 SqlSessionFactoryBuilder
  • 常用API:SqlSessionFactory build(InputStream inputStream)

  • 通过加载mybatis的核心文件的输入流的形式构建一个SqlSessonFactory对象

  • 其中,Resource工具类,这个类在org.apache.ibatis.io包中。

    • Resource类帮助你从类路径下、文件兄台那个或一个web URL中加载资源文件
  • SqlSessionFactory有多个方法创建SqlSession实例。常用有如下两个:

    方法解释
    openSession()会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提交该事务,更新操作数据才会持久化到数据库中
    openSession(boolean autoCommit)参数为是否自动提交,如果设置为true,那么不需要手动提交事务

    代理开发方式

代理开发方式介绍:
  • 采用Mybaits的代理开发方式实现DAO层的开发,这种方式是我们后面进入企业的主流
  • Mapper接口开发方法只需要程序员编写Mapper接口(相等于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法
  • Mapper接口开发需要遵循以下规范
    1. Mapper.xml 文件中的namespace与mapper接口的全限定名相同
    2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
    3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
    4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

在这里插入图片描述

😍❤️SSM 专栏前篇

  • 【SSM-Spring(一)】初上手Spring?别急!从最底部开始学习Spring吧!从Bean开始!本文介绍Spring程序的开发、Bean的声明周期与依赖注入概念
  • 【SSM-Spring(二)】初上手Spring?别急!从最底部开始学习Spring吧!Spring连接数据库、注解开发、Junit测试
  • 【SSM-SpringMVC(一)】Spring接入Web环境!本篇开始研究SpringMVC的使用!本文介绍了SpringMVC,以及SpringMVC的执行流程和常用注解解析
  • 【SSM-SpringMVC(二)】Spring接入Web环境!本篇开始研究SpringMVC的使用!SpringMVC数据响应和获取请求数据
  • 【SSM-Spring(三)】初上手Spring?别急!从最底部开始学习Spring吧!详细介绍SpringAOP切面编程操作和Spring编程式事务控制操作

💕👉博客专栏

  • 英语专栏-涵盖绝大多数的英语语法~~基于B站英语兔视频所作的学习笔记

  • Golang专栏-包含基础、Gin、Goam等知识

  • 云原生专栏-包含k8s、docker等知识

  • 从0开始学习云计算-华为HCIP证书

  • JUC专栏-带你快速领悟JUC的知识!

  • JVM专栏-深入Java虚拟机,理解JVM的原理

  • 基于Java研究 数据结构与算法-包含贪心算法、加权图、最短路径算法等知识

  • Docker专栏-上手热门容器技术Docker

  • SpringBoot专栏-学习SpringBoot快速开发后端

  • 项目管理工具的学习-设计技术:Maven、Git、Gradle等相关管理工具

  • JavaSE-全面了解Java基础

  • JS专栏-使用JS作的一部分实例~

  • 使用CSS所作的一部分案例


文章转载自:

http://fBWQgM9i.kqyfn.cn
http://rVNwNBMJ.kqyfn.cn
http://gGAYM6K4.kqyfn.cn
http://DwAOUTGd.kqyfn.cn
http://6YuCdcnv.kqyfn.cn
http://Q6D9FsyM.kqyfn.cn
http://96xuJJgk.kqyfn.cn
http://NlyTzv1O.kqyfn.cn
http://p8eLnOtG.kqyfn.cn
http://KMw0RUmN.kqyfn.cn
http://6AW4JKt8.kqyfn.cn
http://Nqvr2cwU.kqyfn.cn
http://vX4oaZM9.kqyfn.cn
http://9XYayAld.kqyfn.cn
http://rDlhH5Wx.kqyfn.cn
http://7CEqtjBv.kqyfn.cn
http://4N2Wow6E.kqyfn.cn
http://Hd5BkMBH.kqyfn.cn
http://0aKQUhaL.kqyfn.cn
http://cbRXY3Nr.kqyfn.cn
http://nwLVWrpj.kqyfn.cn
http://zgNDqjv7.kqyfn.cn
http://anf1xo2u.kqyfn.cn
http://QP9dDgWD.kqyfn.cn
http://jFJ3XnQL.kqyfn.cn
http://SvU7mrw4.kqyfn.cn
http://V2D2dR5m.kqyfn.cn
http://Nhl1tYy2.kqyfn.cn
http://UjmWEHGB.kqyfn.cn
http://n8V8XQ77.kqyfn.cn
http://www.dtcms.com/wzjs/753877.html

相关文章:

  • 锁定网站导航栏北京做网站建设的公司哪家好
  • 做百度网站营业执照用注销吗app开发官网
  • 乌尔禾区做网站哪里好泉州制作网站设计
  • 在网上做兼职美工有哪些网站宁波网站建设推广平台
  • 上海中艺建设集团网站品牌网络seo方案外包
  • 好看网电影网站模板免费下载wordpress首页文件
  • 温州网站建设有限公司软件开发专业信息
  • 静态展示网站多少钱谷歌浏览器下载安装2022最新版
  • 网站建设前期上海网站搭建公司哪家好
  • 代理网站备案表wordpress 首页缓存
  • 音乐网站功能自己在家可以做网站吗
  • 网站系统繁忙怎么办vc6.0做网站
  • 河北建设信息平台网站网站导航字体大小
  • 网站建设人员培训asp网站作业下载
  • 做企业网站的尺寸是多少站长素材官网免费
  • 数码网站建设总体目标推广计划表格
  • 网站自适应屏幕云服务器可以用来做网站么
  • seo网站优化平台芜湖的网站建设公司
  • 海外网站建设推广app开发软件外包
  • 美容加盟网站建设注册公司那家网站做的比较好
  • 网站首页动画代码网站查外链
  • 简单的网站注册流程图大同市建设工程招标投标网站
  • 小榄网站长沙网络公司排行榜
  • 万网企业邮箱登陆界面如何嵌入到自己的网站做网站都需要买什么
  • 什么样的网站利于优化网站开发最新流程
  • 免费crm系统下载杭州seo搜索引擎优化公司
  • 杭州市城乡规划局建设局官方网站专业教育网站建设
  • 有了域名和空间怎么做网站内容太原专业做网站
  • 模拟ip访问网站深圳网站建设网站设计软文推广
  • 卓业网站建设优化营商环境存在问题及整改措施