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

专做老酒的网站济南网站建设行知科技不错

专做老酒的网站,济南网站建设行知科技不错,淘宝客网站如何备案,教育系统网站建设MyBatis是一款持久层框架#xff0c;免除了几乎所有的JDBC代码、参数及获取结果集工作。可以通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录。 1 无框架下的JDBC操作 1#xff09;加载驱动#xff1a;Class.forName(“com.mysql.cj.jdbc.Driv… MyBatis是一款持久层框架免除了几乎所有的JDBC代码、参数及获取结果集工作。可以通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录。 1 无框架下的JDBC操作 1加载驱动Class.forName(“com.mysql.cj.jdbc.Driver”); 2获取连接DriverManager.getConnection(url,user,password); 3创建Statement对象用于想数据库发送SQL语句connect.createStatement(); 4用Statement执行增删查改操作。 5关闭Connection、Statement、ResultSet对象。 public class JdbcExample {private static final String URL jdbc:mysql://localhost:3306/study;private static final String USER root;private static final String PASSWORD 密码;public static void main(String[] args) throws SQLException {Connection connection null;Statement statement null;try {Class.forName(com.mysql.cj.jdbc.Driver);connection DriverManager.getConnection(URL, USER, PASSWORD);statement connection.createStatement();doSelect(statement);doUpdate(statement);} catch (ClassNotFoundException | SQLException e) {throw new RuntimeException(e);} finally {if (connection ! null) connection.close();if (statement ! null) statement.close();}}private static void doSelect(Statement statement) throws SQLException {ResultSet resultSet null;try {resultSet statement.executeQuery(SELECT * FROM e_teacher);while (resultSet.next()) {String name resultSet.getString(name);System.out.println(name);}} catch (SQLException e) {throw new RuntimeException(e);} finally {if (resultSet ! null) resultSet.close();}}private static void doUpdate(Statement statement) throws SQLException {int update statement.executeUpdate(UPDATE e_teacher SET name Java测试 WHERE id 55);System.out.println(更新数量 update);}} 2 MyBatis MyBatis 相比于Hibernate更轻量级。且对于SQL优化和细节控制可操作性更高Hibernate 使用HQL 或原生SQL进行数据库查询但主要关注的是对象的属性和方法通过ORM映射自动生成SQL语句。 2.1 SqlSession — MyBatis执行SQL语句的主要入口 SqlSession的实例用于执行数据库操作它是由SqlSessionFactory被视为单个数据库映射关系经过编译后的内存镜像创建的。具体创建步骤如下 1定义MyBatis配置文件(定义数据库连接信息、mapper、设置等信息)。 2定义相关mapper。 3获取MyBatis配置文件等输入流并根据输入流获取sessionFactory new SqlSessionFactoryBuilder().build(inputStram)。 4获取sqlSession: sessionFactory.openSession()。 5用sqlSession去执行数据库操作。 6关闭sqlSession。 !--mybatis.xml-- ?xml version1.0 encodingUTF-8 ? !DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttps://mybatis.org/dtd/mybatis-3-config.dtd configurationpropertiesproperty nameurl valuejdbc:mysql://localhost:3306/study/property namedriver valuecom.mysql.cj.jdbc.Driver/property nameusername valueroot/property namepassword value密码//propertiestypeHandlerstypeHandler handlercom.huangmingfu.mybatis.handler.DescObjectTypeHandler //typeHandlersenvironments defaultdevenvironment iddevtransactionManager typeJDBC/dataSource typePOOLEDproperty nameurl value${url}/property namedriver value${driver}/property nameusername value${username}/property namepassword value${password}//dataSource/environment/environmentsmappersmapper resourcemapper/course.xml/mapper resourcemapper/teacher.xml//mappers /configurationpublic class SqlSessionInstance {public static SqlSession getSqlSession() {return InnerClass.sqlSession;}private SqlSessionInstance() {}private static class InnerClass {private static SqlSession sqlSession createSqlSession();private static SqlSession createSqlSession() {try {InputStream inputStream Resources.getResourceAsStream(mybatis.xml);SqlSessionFactory sessionFactory new SqlSessionFactoryBuilder().build(inputStream);return sessionFactory.openSession();} catch (IOException e) {throw new RuntimeException(e);}}} } 2.2 类型处理器 MyBatis 在设置预处理语句PreparedStatement中的参数或结果集中取出一个值时会用类型处理器将获取到的值以合适的方式转换成Java类型。在插入或更新数据时同样也会用类型处理器进行转换。 MyBatis 定义了一些默认的处理器用户也可以自定义处理器。 2.2.1 处理枚举类型 MyBatis 定义了两种枚举处理器EnumTypeHandler默认方式把Enum值转换成对应的名字 和 EnumOrdinalTypeHandler把枚举的序数值来映射成对应的整形数值。 如果需要把Enum 值映射成对应的整形值全局设置不太方便可以在resultMap中指定typeHandler。推荐采用默认形式这样在数据库中会更直观 ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.huangmingfu.mybatis.mapper.TeacherMapperresultMap idteacherMap typecom.huangmingfu.mybatis.entity.Teacherresult columngrade propertygrade typeHandlerorg.apache.ibatis.type.EnumOrdinalTypeHandler//resultMapselect idgetByName resultMapteacherMapselect * from e_teacher where name LIKE CONCAT(%,#{name},%) LIMIT 0,1/selectinsert idinsert parameterTypecom.huangmingfu.mybatis.entity.TeacherINSERT INTO e_teacher(name,grade,desc,age)VALUES (#{name},#{grade,typeHandlerorg.apache.ibatis.type.EnumOrdinalTypeHandler},#{desc},#{age})/insert /mapper2.2.2 自定义处理器 自定义处理器可以通过继承BaseTypeHandler来实现在配置文件中注册这个处理器。 public class DescObjectTypeHandler extends BaseTypeHandlerDescObject {Overridepublic void setNonNullParameter(PreparedStatement preparedStatement, int i, DescObject descObject, JdbcType jdbcType) throws SQLException {preparedStatement.setString(i,JSON.toJSONString(descObject));}Overridepublic DescObject getNullableResult(ResultSet resultSet, String s) throws SQLException {return getFromString(resultSet.getString(s));}Overridepublic DescObject getNullableResult(ResultSet resultSet, int i) throws SQLException {return getFromString(resultSet.getString(i));}Overridepublic DescObject getNullableResult(CallableStatement callableStatement, int i) throws SQLException {return getFromString(callableStatement.getString(i));}private DescObject getFromString(String string) {JSONObject jsonObject JSON.parseObject(string);DescObject descObject new DescObject();descObject.setMessage(jsonObject.getString(message));descObject.setTitle(jsonObject.getString(title));return descObject;} } 2.3 映射器实例 映射器是一个接口Mapper接口定义了与数据库交互的SQL语法和方法MyBatist通过动态代理来为这些接口创建实例。 在Spring框架中映射器通常会被声明为Spring Bean。 2.3.1 与SqlSession的关系 映射器实例通常注意不是一定是通过sqlSession实例来获取。当通过映射器实例调用某个方法时实际上是委托给sqlSession去执行相应的Sql语句。sqlSession负责根据映射器的方法名、参数等信息找到对应的SQL语句并通过执行器Executor执行这个SQL语句最后将结果放回给映射器实例。 2.4 缓存策略 MyBatis 主要采用了两种缓存策略。 2.4.1 一级缓存SqlSession级别缓存 是默认的缓存机制。是局部的。作用域是sqlSession的生命周期当sqlSession关闭或清空时一级缓存也会被清空。 原理同一个sqlSession中执行的相同SQL语句和参数只会执行一次数据库查询然后将结果缓存起来下次遇到相同的查询时直接从缓存中获取结果而不是再次访问数据库。 2.4.2 二级缓存Mapper级别缓存 多个SqlSession之间可共享这个缓存需要手动开启。 原理不同的SqlSession 在执行相同的Mapper和相同的SQL语句时可共享二级缓存中的数据当数据在二级缓存中未找到时会执行数据库查询并将结果放入二级缓存中供后续使用。 注意1对同一个数据执行了增删改操作时需要更新或清空缓存以确保缓存中的数据与数据库中保持一致。 2二级缓存是跨SqlSession的需要注意并发和线程安全问题。
http://www.tj-hxxt.cn/news/133864.html

相关文章:

  • 网站建设360搜索引擎广告图片
  • 大型网站系统图wordpress 做一个视频站
  • 关于网站备案前置审批的相关说明 吉林一站式服务广告语
  • 北京网站设计公司哪儿济南兴田德润简介网站设计与推广
  • 网站建设与管理适合女生学吗江苏省建设厅 标准化网站
  • 协会网站方案广州腾虎网络网站建设熊掌号
  • 外贸网站建设模式株洲网站优化找哪家
  • 怎么创建网站赚钱dede网站怎么做404页面
  • 怎么在云服务器上搭建网站t恤在线制作网站
  • 网站建设分为多少模块我市建设车辆违章查询网站 病句
  • 网站建设所需要的软件十大难进的互联网公司
  • 郑州网站建设企业推荐我有云服务器如何建站
  • 建设网站手机版怎么看一级还是二级域名
  • 重庆官方网站建设导入表格数据做地图网站
  • 学习网站开发心得体会学校网站的建设论文
  • 黄页网站怎么查wordpress主题手动安装
  • 网站模板定制app产品开发公司
  • 网站制作优化全包湖南企业seo优化报价
  • 怎么给网站做网站地图南京工程造价信息网
  • 做网站需要什么开发语言网站开发属于哪个税收分类
  • 重庆企业网站推广平台营销网站建设哪里好薇
  • 网站源码是什么龙岗网站设计资讯
  • 内江网站建设公司甘肃省城乡住房建设厅网站首页
  • 四川住房城乡建设厅官方网站公司网站建设代理
  • 看电视剧的免费网站大全手机企业网站制作
  • 网站设计模板是什么陕西省建设银行分行网站
  • 献县做网站价格三七游戏官网
  • 把网站做静态化是什么意思使用html5的网站
  • 网站不备案会有什么影响吗九歌人工智能诗歌写作网站
  • 网站开发外包费用的会计分录win 2012 iis 默认网站