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

医院病房建设网站深圳app开发公司鑫酷

医院病房建设网站,深圳app开发公司鑫酷,互联网家装公司,删除中文wordpress文章目录 一、mybatis1、概念2、JDBC缺点2.1、之前jdbc操作2.2 、原始jdbc操作的分析 3、mybatis的使用3.1、导入maven依赖3.2、新建表3.3、实体类3.4、编写mybatis的配置文件3.5、编写接口 和 映射文件3.6、编写测试类3.7、注意事项 4、代理方式开发5、mybatis和spring整合5.1… 文章目录 一、mybatis1、概念2、JDBC缺点2.1、之前jdbc操作2.2 、原始jdbc操作的分析 3、mybatis的使用3.1、导入maven依赖3.2、新建表3.3、实体类3.4、编写mybatis的配置文件3.5、编写接口 和 映射文件3.6、编写测试类3.7、注意事项 4、代理方式开发5、mybatis和spring整合5.1、开发步骤5.1.1、导入maven依赖5.1.2、创建账户的实体类 Account5.1.3、创建mapper接口和对应的xml文件5.1.4、Service接口类和实现类5.1.5、数据库配置 db.properties5.1.6、spring配置文件5.1.7、mybatis的配置文件5.1.8、测试功能 二、整合的总结三、mybatis缓存1、一级缓存2、二级缓存 四、隔离级别五、事务 一、mybatis 1、概念 框架是一款半成品软件我们可以基于这个半成品软件继续开发来完成我们个性化的需求ORM(Object Relational Mapping 对象关系映射)指的是持久化数据和实体对象的映射模式。mybatis:mybatis 是一个优秀的基于java的持久层框架它内部封装了jdbc使开发者只需要关注sql语句本身而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种 statement配置起来并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题对jdbc 进行了封装屏蔽了jdbc api 底层访问细节使我们不用与jdbc api 打交道就可以完成对数据库的持久化操作。 2、JDBC缺点 2.1、之前jdbc操作 2.2 、原始jdbc操作的分析 原始 JDBC 的操作问题分析 1. 频繁创建和销毁数据库的连接会造成系统资源浪费从而影响系统性能。 2. sql语句在代码中硬编码如果要修改 sql 语句就需要修改 java 代码造成代码不易维护。 3. 查询操作时需要手动将结果集中的数据封装到实体对象中。 4. 增删改查操作需要参数时需要手动将实体对象的数据设置到 sql 语句的占位符。 原始 JDBC 的操作问题解决方案 1. 使用数据库连接池初始化连接资源。 2. 将 sql 语句抽取到配置文件中。 3. 使用反射、内省等底层技术将实体与表进行属性与字段的自动映射 使用数据库连接池初始化连接资源。将sql语句抽取到配置文件中。使用反射、内省等底层技术将实体与表进行属性与字段的自动映射 3、mybatis的使用 ①添加MyBatis的maven包 ②创建user数据表 ③编写User实体类 ④编写核心文件MyBatisConfig.xml ⑤编写映射文件UserMapper.xml 和 UserMapper接口 ⑥编写测试类 3.1、导入maven依赖 !-- 数据库--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.29/version/dependency!-- MyBatis --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.3/version/dependency!-- 日志依赖--dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version/dependency3.2、新建表 CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(255) DEFAULT NULL, password varchar(255) DEFAULT NULL, age int(11) DEFAULT NULL, phone varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8; 3.3、实体类 public class User {private int id;private String username;private String password;private String phone;private int age;set get 方法 }3.4、编写mybatis的配置文件 可以参考官方文档 https://mybatis.org/mybatis-3/zh/getting-started.html # 数据库信息 db.propertiesdrivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/linjiu?useUnicodetruecharacterEncodingutf-8 usernameroot passwordroot# 配置文件 ?xml version1.0 encodingUTF-8 ? !--MyBatis的DTD约束-- !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd!--configuration 核心根标签-- configuration!--引入数据库连接的配置文件--properties resourcedb.properties/!--配置LOG4J--settingssetting namelogImpl valuelog4j//settings!--起别名--typeAliasestypeAlias typecom.xinzhi.model.User aliasuser/!--package namecom.xinzhi.model/--/typeAliases!--environments配置数据库环境环境可以有多个。default属性指定使用的是哪个--environments defaultmysql!--environment配置数据库环境 id属性唯一标识--environment idmysql!-- transactionManager事务管理。 type属性采用JDBC默认的事务--transactionManager typeJDBC/transactionManager!-- dataSource数据源信息 type属性 连接池--dataSource typePOOLED!-- property获取数据库连接的配置信息 --property namedriver value${driver} /property nameurl value${url} /property nameusername value${username} /property namepassword value${password} //dataSource/environment/environments!-- mappers引入映射配置文件 --mappers!-- mapper 引入指定的映射配置文件 resource属性指定映射配置文件的名称 --mapper resourceUserMapper.xml//mappers /configuration# 日志文件 log4j.properties # Global logging configuration # ERROR WARN INFO DEBUG log4j.rootLoggerDEBUG, stdout # Console output... log4j.appender.stdoutorg.apache.log4j.ConsoleAppender log4j.appender.stdout.layoutorg.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern%5p [%t] - %m%n 3.5、编写接口 和 映射文件 public interface UserMapper {ListUser selectAll();User selectById(int id); }//映射文件 ?xml version1.0 encodingUTF-8 ? !--MyBatis的DTD约束-- !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd!--mapper核心根标签namespace属性名称空间 -- mapper namespacecom.linjiu.mapper.UserMapper!--select查询功能的标签id属性唯一标识resultType属性指定结果映射对象类型parameterType属性指定参数映射对象类型--select idselectAll resultTypeuserSELECT * FROM user/selectselect idselectById resultTypecom.linjiu.model.User parameterTypeintselect * from user where id#{id}/select /mapper mapper.xml文件 ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespace/mapper3.6、编写测试类 Testpublic void main1( ) throws IOException {//加载核心配置文件InputStream is Resources.getResourceAsStream(mybatis-config.xml);//获得sqlSession工厂对象SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(is);//获得sqlSession对象SqlSession sqlSession sqlSessionFactory.openSession();//执行sql语句ListUser users sqlSession.selectList(com.linjiu.mapper.UserMapper.selectAll);//打印结果System.out.println(users);User user sqlSession.selectOne(com.linjiu.mapper.UserMapper.selectById, 1);System.out.println(user);//打印结果sqlSession.close();}注意如果是增删改需要提交事务 sqlSession.commit();如果sqlSessionFactory.openSession(true)括号中添加了true那么就是自动提交事务。 3.7、注意事项 environments标签 # 事务管理器transactionManager- JDBC这个配置就是直接使用了JDBC 的提交和回滚设置它依赖于从数据源得到的连接来管理事务作用域。- MANAGED这个配置几乎没做什么。它从来不提交或回滚一个连接而是让容器来管理事务的整个生命周期比如 JEE 应用服务器的上下文。 默认情况下它会关闭连接然而一些容器并不希望这样因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。 # 数据源dataSource- UNPOOLED这个数据源的实现只是每次被请求时打开和关闭连接。- POOLED这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来。- JNDI这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用容器可以集中或在外部配置数据源然后放置一个 JNDI 上下文的引用。 4、代理方式开发 采用 Mybatis 的代理开发方式实现 DAO 层的开发这种方式是我们后面进入企业的主流。 Mapper 接口开发方法只需要程序员编写Mapper 接口相当于Dao 接口由Mybatis 框架根据接口定义创建接口的动态代理对象。 Mapper 接口开发需要遵循以下规范 1、 Mapper.xml文件中的namespace与mapper接口的全限定名相同 2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同 3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同 4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同 Testpublic void main1( ) throws IOException {InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession sqlSessionFactory.openSession();// 获取到mapper的代理对象代理对象直接操作数据库UserMapper mapper sqlSession.getMapper(UserMapper.class);ListUser users mapper.selectAll();System.out.println(users);User user mapper.selectById(1);System.out.println(user);sqlSession.close();}面试题 ​ mybatis中# 和 $的区别 5、mybatis和spring整合 5.1、开发步骤 1 导入maven依赖2 创建账户的实体类3 创建mapper接口和对应的xml文件4 Service接口类和实现类5 数据库的配置文件6 spring配置文件7 mybatis的配置文件8 测试功能 5.1.1、导入maven依赖 dependenciesdependencygroupIdorg.springframework/groupIdartifactIdspring-beans/artifactIdversion5.0.7.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion5.0.7.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.0.7.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-expression/artifactIdversion5.0.7.RELEASE/version/dependency!-- 基于AspectJ的aop依赖 --dependencygroupIdorg.springframework/groupIdartifactIdspring-aspects/artifactIdversion5.0.7.RELEASE/version/dependencydependencygroupIdaopalliance/groupIdartifactIdaopalliance/artifactIdversion1.0/version/dependency!-- spring 事务管理和JDBC依赖包 --dependencygroupIdorg.springframework/groupIdartifactIdspring-tx/artifactIdversion5.0.7.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.0.7.RELEASE/version/dependency!-- spring 单元测试组件包 --dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion5.0.7.RELEASE/version/dependency!-- 单元测试Junit --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/version/dependency!-- mysql数据库驱动包 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.35/version/dependency!-- dbcp连接池的依赖包 --dependencygroupIdcommons-dbcp/groupIdartifactIdcommons-dbcp/artifactIdversion1.4/version/dependency!-- mybatis依赖 --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.5/version/dependency!-- mybatis和spring的整合依赖 --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion1.3.1/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/version/dependency/dependenciesbuildpluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion2.5/versionconfigurationskipTeststrue/skipTests/configuration/plugin/plugins/build5.1.2、创建账户的实体类 Account public class Account {private int id;private String name;private double money;set get 方法 } CREATE TABLE account (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) DEFAULT NULL,money decimal(11,0) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT3 DEFAULT CHARSETutf8;5.1.3、创建mapper接口和对应的xml文件 public interface AccountMapper {int update(Param(name) String name,Param(money) double money);double queryMoney(String name); }?xml version1.0 encodingUTF-8 ? !--MyBatis的DTD约束-- !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd!--mapper核心根标签namespace属性名称空间 -- mapper namespacecom.linjiu.dao.AccountMapper!-- 查询 --select idqueryMoney parameterTypestring resultTypedoubleSELECT money from account where name #{name}/select!-- 修改 --update idupdate parameterTypeaccountUPDATE account SET money #{money} WHERE name #{name}/update/mapper说明 param() 当只有一个参数时没什么好说的传进去一个值也只有一个参数可以匹配。当存在多个参数时传进去的值就区分不开了这时可以考虑用 当配置文件中有多个参数的时候parameterType该怎么写呢 一般可以使用实体类也可以使用map。底层还是使用了反射的原理根据对象的字段去匹配数据库相应的字段 5.1.4、Service接口类和实现类 public interface IAccountService {/*** 转账功能* param from 主动转账的人* param to 收款的人* param money 金额*/void transfer(String from, String to, double money); }Service Transactional public class AccountServiceImpl implements IAccountService {Autowiredprivate AccountMapper accountMapper;public void transfer(String from, String to, double money) {// 先查询from账户的钱double fromMoney accountMapper.queryMoney(from);// 对from账户进行扣钱操作accountMapper.update(from, fromMoney-money);//手动制造异常System.out.println(1 / 0);// 先查询to账户的钱double toMoney accountMapper.queryMoney(to);// 对to账户进行加钱操作accountMapper.update(to, toMoney-money);System.out.println(支付宝到账money元);} }5.1.5、数据库配置 db.properties jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/linjiu?useUnicodetruecharacterEncodingutf-8 jdbc.usernameroot jdbc.passwordroot5.1.6、spring配置文件 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:aophttp://www.springframework.org/schema/aopxmlns:txhttp://www.springframework.org/schema/tx xmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd!--引入外部的配置文件--context:property-placeholder locationclasspath:db.properties/!-- 配置数据源--bean iddataSource classorg.apache.commons.dbcp.BasicDataSourceproperty namedriverClassName value${jdbc.driver}/property nameurl value${jdbc.url} /property nameusername value${jdbc.username} /property namepassword value${jdbc.password} //bean!-- 配置事务管理器--bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource //bean!--开启事务注解--tx:annotation-driven transaction-managertransactionManager /!-- xml方式配置事务一般使用上面注解的方式因为方便和简单其实事务也是对业务层逻辑的增强-- !-- tx:advice transaction-managertransactionManager idtxAdvice -- !-- tx:attributes-- !-- tx:method name* isolationDEFAULT propagationREQUIRED read-onlyfalse/-- !-- /tx:attributes-- !-- /tx:advice-- !-- -- !-- aop:config-- !-- aop:pointcut idmyPointCut expressionexecution(* com.soft.impl.*.*(..))/-- !-- aop:advisor advice-reftxAdvice pointcut-refmyPointCut/-- !-- /aop:config--!-- 配置sqlSessionFactory主要是指定数据源配置文件的位置--bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBeanproperty namedataSource refdataSource/property nameconfigLocation valueclasspath:mybatis-config.xml/property namemapperLocations valueclasspath:mapper/*.xml//bean!-- 扫描mapper文件--bean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namebasePackage valuecom.linjiu.dao//bean!-- 组件扫描扫描指定包下的注解--context:component-scan base-packagecom.linjiu//beans5.1.7、mybatis的配置文件 ?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd configuration!-- 开启二级缓存默认是关闭的--settingssetting name cacheEnabled value true //settings!-- 别名--typeAliasespackage namecom.linjiu.model //typeAliases!-- map.xml文件的位置指定因为sqlsessionfactory中已经指定过了所以可以不配置--mappers!-- mapper resourcemapper/AccountMapper.xml/--/mappers/configuration5.1.8、测试功能 RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations {classpath:applicationContext.xml}) public class AppTest {Autowiredprivate IAccountService accountService;Testpublic void testTransfer() throws Exception {accountService.transfer(husband, wife, 100);} }说明 RunWith(SpringJUnit4ClassRunner.class) 让测试运行于Spring测试环境ContextConfiguration(locations {“classpath:applicationContext.xml”}) 二、整合的总结 其实整合的目的就是把mapper对象放入到容器中。从接口生成对象底层还是反射 注意配置文件的加载测试类中指定了spring的配置文件 spring的配置文件中又指定了mybatis配置文件和mapper映射文件。 三、mybatis缓存 mybatis的缓存主要是针对查询操作的 1、一级缓存 一级缓存默认是开启的 SqlSession 级别的缓存只要 SqlSession 没有 flush 或 close它就存在。当调用 SqlSession 的修改添加删除commit()close()等方法时就会清空一级缓存。 2、二级缓存 二级缓存是 mapper 映射级别的缓存 默认是不开启的需要手动开启二级缓存 当我们在使用二级缓存时所缓存的类一定要实现 java.io.Serializable 接口也就是序列化 !-- 开启二级缓存的支持 -- setting namecacheEnabled valuetrue//settings四、隔离级别 1.读未提交Read uncommitted脏读 脏读 一个事务在执行的过程中读取到了其他事务还没有提交的数据 Tom的账户money0公司发工资把5000元打到Tom的账户上Tom的moneymoney5000元但是该事务并未提交而Tom正好去查看账户发现工资已经到账账户money5000元非常高兴可是不幸的是公司发现发给Tom的工资金额不对应该是2000元于是迅速回滚了事务修改金额后将事务提交Tom再次查看账户时发现账户money2000元Tom空欢喜一场从此郁郁寡欢走上了不归路…… 2.读已提交Read committed 可避免 脏读 的发生。 两次读取的数据不一样自己事务没有提交的时候可以读取别的已经提交的事务。 Tom拿着工资卡去消费酒足饭饱后在收银台买单服务员告诉他本次消费1000元Tom将银行卡给服务员服务员将银行卡插入POS机POS机读到卡里余额为3000元就在Tom磨磨蹭蹭输入密码时他老婆以迅雷不及掩耳盗铃之势把Tom工资卡的3000元转到自己账户并提交了事务当Tom输完密码并点击“确认”按钮后POS机检查到Tom的工资卡已经没有钱扣款失败Tom十分纳闷明明卡里有钱于是怀疑POS有鬼和收银小姐姐大打出手300回合之后终因伤势过重而与世长辞Tom老婆痛不欲生郁郁寡欢从此走上了不归路… 3.可重复读Repeatable read幻读 MySql默认隔离级别。自己事务没有提交的时候读不到别的已经提交的事务。 Tom的老婆工作在银行部门她时常通过银行内部系统查看Tom的工资卡消费记录。2019年5月的某一天她查询到Tom当月工资卡的总消费额为80元Tom的老婆非常吃惊心想“老公真是太节俭了嫁给他真好”而Tom此时正好在外面胡吃海塞后在收银台买单消费1000元即新增了一条1000元的消费记录并提交了事务沉浸在幸福中的老婆查询了Tom当月工资卡消费明细一探究竟可查出的结果竟然发现有一笔1000元的消费Tom的老婆瞬间怒气冲天外卖订购了一个大号的榴莲傍晚降临Tom生活在了水深火热之中只感到膝盖针扎的痛… 4.串行化Serializable 可避免 脏读、不可重复读、幻读 的发生。 五、事务 事务有以下特性(ACID) 1、原子性Atomicity 事务作为一个整体被执行包含在其中的对数据库的操作要么全部被执行要么都不执行。 2、一致性Consistency 事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。 3、隔离性Isolation 多个事务并发执行时一个事务的执行不应影响其他事务的执行。 4、持久性Durability 已被提交的事务对数据库的修改应该永久保存在数据库中
http://www.ihoyoo.com/news/10759.html

相关文章:

  • 浙江建设银行官网站纪念币彩票网站上的走势图是怎么做的
  • 短期网站建设培训班网站建设和媒体渠道
  • 菜鸟移动端网站开发海口手机网站建设
  • 网站重新备案 需要关闭网站么电子商务网站建设感想
  • dw如何建设网站网站建设的质量区别
  • 合肥有哪些做网站的山东省建设教育信息网站首页
  • 哈尔滨网页设计模板网站市场营销策划公司
  • 专业的企业网站建设公司广州市城乡建设局
  • 建设网站需要注册证书吗百度竞价排名背后的伦理问题
  • 正规免费发布信息网站wordpress插件重写
  • 专做洗衣柜的网站建网站 必须学html吗
  • 做网站原价商品打个横线企业网站推广工具
  • 南宁市建设局网站青岐网站建设平台
  • 网站开发网站设计制作咸阳市网站建设公司
  • 做精神科网站丹徒网站建设怎么样
  • 做网站计入什么科目子域名绑定wordpress子目录
  • you物公馆网站建设长春市建设工程信息网站
  • 网站程序方面如何开设一个网站
  • 网站建设桔子科技站长工具seo综合查询adc
  • 南京做企业网站公司哪家好工程设计公司
  • 可以悬赏做任务的叫什么网站张槎网站建设制作
  • 宇舶手表网站加盟类网站怎么做
  • 大渡口的网站开发公司电话大连免费营销型建站网络推广
  • 影楼网站建设全球建站
  • 网站建设维护学什么科目公司对比网站
  • 网站开发外快服务器两个域名一个ip做两个网站
  • 李志自己做网站2023北京一级战备开始
  • 个人站点的制作网站备案没有了
  • 深圳设计网站的公司wordpress优化指南
  • 百度网盘做自已网站网站做任务挣钱