mg4155com > mg4155线路检测手机版 > Java编制程序观念,java8法定文书档案

原标题:Java编制程序观念,java8法定文书档案

浏览次数:116 时间:2019-10-07

/** * 基础DAO,用于封装dao操作 * * @author 孔垂云 * @date 2017-06-13 */@Componentpublic class BaseDao<T, S> { @Autowired protected JdbcTemplate jdbcTemplate; @Autowired protected NamedParameterJdbcTemplate namedParameterJdbcTemplate; /** * 新增 * * @param sql * @param t * @return */ protected int insert(String sql, T t) { return namedParameterJdbcTemplate.update(sql, new BeanPropertySqlParameterSource; } /** * 新增并返回主键 * * @param sql * @param t * @param pkField 主键字段 * @return */ protected int insertForId(String sql, T t, String pkField) { KeyHolder keyHolder = new GeneratedKeyHolder(); int rc = namedParameterJdbcTemplate.update(sql, new BeanPropertySqlParameterSource, keyHolder, new String[]{pkField}); if (rc > 0) { return keyHolder.getKey().intValue(); } else { return 0; } } /** * 修改,参数为model类 * * @param sql * @param t * @return */ protected int update(String sql, T t) { return namedParameterJdbcTemplate.update(sql, new BeanPropertySqlParameterSource; } /** * 按照参数修改 * * @param sql * @param objects * @return */ protected int update(String sql, Object... objects) { return jdbcTemplate.update(sql, objects); } /** * 删除 * * @param sql * @param objects * @return */ protected int delete(String sql, Object... objects) { return jdbcTemplate.update(sql, objects); } /** * 根据参数获取model * * @param sql * @param objects * @return */ protected T get(String sql, Object... objects) { List<T> list = jdbcTemplate.query(sql, objects, BeanPropertyRowMapper.newInstance(getClazz; if (list.size return list.get; else return null; } /** * 取得当前泛型的实际class名 * * @return */ private Class<T> getClazz() { return ((Class<T>) ((ParameterizedType) getClass() .getGenericSuperclass.getActualTypeArguments; } /** * 直接根据sql获取列表 * * @param sql * @return */ protected List<T> list(String sql) { List<T> list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(getClazz; return list; } /** * 根据sql和多参数获取列表 * * @param sql * @param objects * @return */ protected List<T> list(String sql, Object... objects) { List<T> list = jdbcTemplate.query(sql, objects, BeanPropertyRowMapper.newInstance(getClazz; return list; } /** * 根据查询条件获取列表 * * @param sql * @param s * @return */ protected List<T> list(String sql, S s) { List<T> list = namedParameterJdbcTemplate.query(sql, new BeanPropertySqlParameterSource, BeanPropertyRowMapper.newInstance(getClazz; return list; } /** * 查询总数,无参数 * * @param sql * @return */ protected int count(String sql) { return jdbcTemplate.queryForObject(sql, Integer.class); } /** * 查询总数,带参数 * * @param sql * @return */ protected int count(String sql, Object... objects) { return jdbcTemplate.queryForObject(sql, objects, Integer.class); } /** * 查询总数,带查询对象 * * @param sql * @param s * @return */ protected int count(String sql, S s) { return namedParameterJdbcTemplate.queryForObject(sql, new BeanPropertySqlParameterSource, Integer.class); }}
拾分抛出:

throw new EOFExcetion();或:EOFExcetion e = new EOFException(); throw e;

2.3 标志-整清理计算法

复制算法当目的存活率较高的情景时,照样会现出频率低下的标题,别的内部存款和储蓄器要浪费50%。为了防止上述难点,出现了 标识-整清理计算法。(mark-compact) 其标识进度与标识-清除算法一样,但继续手续不直接铲除,而是让抱有存活的靶子都向一端移动,然后径直清理掉边界以外的内部存款和储蓄器。

序列化

假定拉姆da表达式的目的参数和破获参数都以能够可连串化的,那么该Lambda表明式也是足以体系化的。可是,正如内部类同样,对其种类化是极不提倡的。

java堆通过 -Xms 和-Xmx配置堆的尺寸。假如堆不也许再扩大,将会抛出OutOfMemoryError十分。

BaseDao的原理

1、泛型类,BaseDao是二个泛型类,需求传入七个泛型对象<T S>,第三个是实体类,第2个是询问VO类,若无第四个,第3个也为实体类。2、该类里面加多或重写了insert、update、delete、get、list、count等措施,基本满意广大的数据库操作方法。

SysUserDao.java

@Repositorypublic class SysUserDao extends BaseDao<SysUser, SysUserSearchVO> { /** * 新增用户 * @param sysUser * @return */ public int add(SysUser sysUser) { String sql = "insert into t_sys_user(username,password,randomcode,status,realname,mobile,created_at,created_by,role_id)"; sql += " values(:username,:password,:randomcode,1,:realname,:mobile,sysdate,:createdBy,:roleId)"; return insertForId(sql, sysUser, "id"); } /** * 修改用户 * @param sysUser * @return */ public int update(SysUser sysUser) { String sql = "update t_sys_user set realname=:realname,role_id=:roleId,mobile=:mobile,last_modified_by=:lastModifiedBy,last_modified_at=sysdate where id=:id "; return update(sql, sysUser); } /** * 修改密码 * * @param id * @param newPass * @param randowmcode * @return */ public int updatePass(int id, String newPass, String randowmcode) { String sql = "update t_sys_user set password=?,randomcode=? where id=? "; return update(sql, newPass, randowmcode, id); } /** * 修改个人信息,用户自己操作 * * @param sysUser * @return */ public int updateInfo(SysUser sysUser) { String sql = "update t_sys_user set realname=:realname,telephone=:telephone where id=:id"; return update(sql, sysUser); } /** * 修改状态 * * @param id * @param status * @return */ public int updateStatus(int id, int status) { String sql = "update t_sys_user set status=? where id=?"; return update(sql, status, id); } /** * 删除用户 * @param id * @return */ public int delete { String sql = "delete from t_sys_user where id=?"; return delete; } public SysUser get { String sql = "select t.id,t.id,t.username,t.password,t.randomcode,t.status,t.realname,t.mobile,t.created_at,t.created_by,t.role_id,t.last_modified_by,t.last_modified_at from t_sys_user t where id=?"; return get; } /** * 根据username获取sysUser * * @param username * @return */ public SysUser getByUsername(String username) { String sql = "select t.id,t.username,t.password,t.randomcode,t.status,t.realname,t.mobile,t.created_at,t.created_by,t.role_id,t.last_modified_by,t.last_modified_at,(select name from t_sys_role where id=role_id) roleName from t_sys_user t where username=?"; return get(sql, username); } /** * 查询用户信息 * * @param sysUserSearchVO * @return */ public List<SysUser> list(SysUserSearchVO sysUserSearchVO) { String sql = "select t.id,t.username,t.password,t.randomcode,t.status,t.realname,t.mobile,t.created_at,t.created_by,t.role_id,t.last_modified_by,t.last_modified_at,(select name from t_sys_role where id=t.role_id) roleName from t_sys_user t where 1=1 "; sql += createSearchSql(sysUserSearchVO); sql += " order by id asc"; sql = PageUtil.createMysqlPageSql(sql, sysUserSearchVO.getPageIndex; return list(sql, sysUserSearchVO); } public List<SysUser> listAll() { String sql = "select t.id,t.username,t.password,t.randomcode,t.status,t.realname,t.mobile,t.created_at,t.created_by,t.role_id,t.last_modified_by,t.last_modified_at,(select name from t_sys_role where id=role_id) roleName from t_sys_user t "; sql += " order by id asc"; return list; } /** * 查询用户总数 * * @param sysUserSearchVO * @return */ public int count(SysUserSearchVO sysUserSearchVO) { String sql = "select count from t_sys_user where 1=1 "; sql += createSearchSql(sysUserSearchVO); return count(sql, sysUserSearchVO); } private String createSearchSql(SysUserSearchVO sysUserSearchVO) { String sql = ""; if (StringUtil.isNotNullOrEmpty(sysUserSearchVO.getUsername { sql += " and username=:username"; } if (StringUtil.isNotNullOrEmpty(sysUserSearchVO.getRealname { sql += " and realname like :realnameStr"; } if (sysUserSearchVO.getRoleId() != null) { sql += " and role_id=:roleId"; } if (sysUserSearchVO.getStatus() != null) { sql += " and status=:status"; } return sql; } /** * 所有人员列表,查询日志使用 * * @return */ public List<ComboboxVO> listAllUser() { String sql = "select id value,username content from t_sys_user order by id"; return listCombobox; }}
Java7新特性 try with Resources:

try(Resource res){ }try块退出时,将电动res.close,无需写finally。八个Resource用逗号隔绝。

被检查的分外转为不检查的至极:catch(Exception e) { throw new RuntimeException},用getCause() 捕获特定相当。

何以文雅的管理特别?说说你们对Java中格外管理的认知吧?《Effective Java》中有关那么些处理的几条建议

Java编制程序观念,java8法定文书档案。3.7 G1收集器

G1是一款面向服务端的垃圾收集器,具备如下特征:并行与产出:G1能充足利用多CPU,多情形下的硬件优势,使用多少个CPU来浓缩停立刻间,部分其余搜罗器须求暂停的动作,G第11中学得以出现的法门进行实践。分代采撷:G第11中学还是使用分代收罗。空间整合:G1基于标识整清理计算法完结搜集,局地来看是基于复制算法,运维期间不会发生内部存款和储蓄器碎片。可预测停顿:能够钦定停顿的小时部分。G1可分为如下步骤:初叶标志(Initial marking)并发标志(Concurrent marking)最后标识(Final 马克ing)筛选回收(Live Data Counting and evacuation)

图片 1G1搜罗器运转暗意图

参数 描述
UserSerialGC 虚拟机在client模式下的默认值,打开此开关后,用于Serial+Serial Old的收集器组合进行内存回收
UserParNewGC 打开此开关 使用ParNew + Serial Old收集器组合进行内存回收
UseConcMarkSweepGC 打开此开关,使用ParNew+CMS+Serial Old收集器组合进行内存回收。Serial Old在CMS收集器出现concurrent Mode Failure 失败后的后备收集器
UseParallelGC 在server模式下的默认值,打开此开关后使用Scavenge+Serial Old收集器组合进行回收
UseParallelOldGC 打开此开关后使用 Parallel Scavenge+Parallel Old收集器组合进行内存回收
SurvivorRatio 新生代中Eden区域与Survivor区域的比值,默认为8,表示Eden:Survivor=8:1
PretenureSizeThreshold 直接晋升到老年代对象的大小,设置这个参数后大于这个参数的对象直接在老年代中分配
MaxTenuringThreshold 晋升老年代对象的年龄,每个对象坚持一次MnorGC年龄就加一,当超过这个参数值就进入老年代
UseAdaptiveSizePolicy 动态调整java堆各个区域的大小以及进入老年代的年龄
HandlePromotionFailure 是否允许分配担保失败,即老年代剩余空间不足以应付新生代整个对象都存活的特殊情况
ParalleGCThreads 设置并行GC时进行内存回收的线程数
GCTimeratio GC时间占总时间比率,默认值为99,允许1%的GC时间。只在Parallel Seavenge收集器时生效
MaxGCPauseMillis 设置GC的最大停顿时间,只在Parallel Seavenge收集器时生效
CMSInitiatingOccupancyFration 设置CMS老年代空间被使用多少后触发GC,默认值为68%,只在CMS收集器时生效
UseCMSCompactAtFullCollection 设置CMS收集器完成垃圾收集后是否需要进行一次碎片整理,只在CMS垃圾收集器时生效
CMSFullGCBeforeCompaction 设置CMS收集器进行若干次垃圾收集后再启动一次内存碎片整理,只在CMS垃圾收集器时生效

MinorGC:新生代产生的垃圾堆回收动作,通常速度十分的快。MajorGC/FullGC:发生在耄耄之时期的GC,出现MajorGC,平常会陪伴一遍MinorGC。MajorGC速度平常比MinorGC慢10倍以上。1.大部分情况下,对象在Eden区中实行分红,当Eden中向来不充分的分配空间时,设想机将开展一回MinorGC。2.大对象直接踏向花甲之年代,制止接触大批量内部存款和储蓄器复制。3.漫漫并存的指标步入耄耄之时代。4.动态目的年龄决断,为了能越来越好的适应不一样的次序的内部存款和储蓄器景况,虚构机实际不是世代须求供给对象的年华达到马克斯TenuringThreshold技能晋升天命之年代。倘若在SurOPPOr空间中一模一样年龄对象的大小总和大于SurrHUAWEIr空间的一半,则年龄超越等于该年龄的目的就足以向来进去老时期。5.上空分配担保:在出殡和埋葬MinorGC在此以前虚构时机先检查天命之时期最大可用的连日内部存款和储蓄器空间是还是不是超过新生代全体指标的总和,假使条件成了,则MinorGC能够确定保证卫安全全。如若不树立,则会检查是或不是设置了允许保证退步,假设同意,则会持续检查老时期最大可用连续内部存款和储蓄器空间是不是超过历次晋升到古稀之年代对象的平均大小,如若当先,将尝试进行一回MinorGC,要是低于,则要拓宽一回FullGC。

简述

无名类有多个标题,假若佚名类的兑现特别轻便,举个例子多少个只满含三个主意的接口,那么那样的无名类的语法是鸠拙和不清晰的。在那个境况下,你平时会尝试将作用作为参数字传送递给另叁个方法,举个例子某个人点击按钮时,它将发生的现实表现。lambda表明式允许你这么做,将功能作为艺术的参数,大概把代码充作数据。

上一节,Anonymous Classes ,为你来得了何等兑现一个佚名的基础类。尽管它日常比闻明称的类越发简洁,对于只有叁个办法的类,以至是无名氏类,依旧展现有个别过分迟钝。lambda表达式能够让您尤其简洁的说明这种只有十足方法类的实例。

图片 2jvm1.7虚构机械运输营时数据区域

上面也秀一秀封装的BaseDao

try-catch-finally:

不论是try块中是不是有不行抛出,finally块的代码都会被实施try{ } catch { } finally { }

finally应用:当try块在循环里,可在finally块中装置计数器等等,为循环设置摒弃条件须要求关张的财富,举个例子已开发的公文、互连网连接,画的图纸等等尽管try-finally块中有throw语句,或然关联break/continue,finally块依然会被实践

3.4 Serial Old收集器

Serial Old搜集器是Serial搜集器的花甲之年代版本,同样式叁个单线程搜罗器,使用标识整清理计算法。收罗器的显要意义也是提必要Client方式下使用,在Server方式下,主要有两大用途:

在GUI程序中运用拉姆da表明式

在图形客户分界面包车型大巴使用中一呼百应诸如键盘事件、鼠标事件依然滚动事件的时候,你相似都急需创制事件管理器,而那经常涉及到落实某些接口。常常情状下,事件管理接口都是包涵一个办法的函数式接口。

在无名氏类一节中研商了javaFX示例HelloWorld.java,你能够采纳Lambda表明式替代无名类:

btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hello World!"); } });

btn.setOnAction艺术钦点了当btn代表的按键被触发时供给进行的操作。这几个格局需求一个EventHandler<ActionEvent>品类的靶子。EventHandler<ActionEvent>接口只包罗了多少个艺术,void handle。那是贰个函数接口,由此你可以如下使用Lambda表达式代替:

 btn.setOnAction( event -> System.out.println("Hello World!") );

直白内存(Direct Memory) 并非java设想机运作时内部存款和储蓄器的一有的。在jdk1.4今后的本子中出席了NIO,引进一种基于通道channel和缓冲区Buffer的IO情势,能够直接利用分配堆外内部存款和储蓄器。然后经过存款和储蓄在堆中的DirectByteBuffer对象作为那块内部存款和储蓄器的援用来操作。能料定抓实质量,幸免在java堆和native堆中来回复制数据。 当该区域和三哥内部存储器区域总和大于物理内部存款和储蓄器限制的时候,会产出OutOfMemoryError分外。

<!--注入namedParameterJdbcTemplate --> <bean > <constructor-arg ref="dataSource"></constructor-arg> </bean>
丰盛评释:

在格局的首部注明全部望抛出的极度,逗号隔绝。比如被检查十分,不能管理,只可以前进传递。举个例子要开拓的文件海市蜃楼。public void ff() throws FileNotFoundException, EOFExcetion

3.3 Parallel Scavenge收集器

Parallel Scavenge搜罗器是二个新生代搜聚器,也应用复制算法,并行八线程采摘。特点在于到达叁个可控目的吞吐量(Throughput)。吞吐量 = 运转客户代码的时日/(运营客商代码的日子+GC耗时)。-XX:马克斯GCPauseMillis 设置停登时间。-XX:GCTimeratio 设置吞吐量。Parallel Scavenge搜罗器 能够依照上述三个参数实行自适应调解。

Lambda表达式的语法

叁个lambda表明式由以下几个部分构成:

  • 包围在小括号内的用逗号分隔的形参列表。CheckPerson.test办法富含了一个参数p,代表了Person类的八个实例。

注意:lambda表达式的形参类型是足以大致的。除外,倘诺唯有一个形参,小括号也足以简轻易单。比如上面包车型客车lambda表明式如故是合法的:

p -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25
  • 箭头符号->
  • 大旨,由单独的表达式或然语句块组成。本例中选择如下的表明式:
p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25

如若应用了单身的表达式,那么java运转时对表达式求值然后回到该值。只怕,你也足以应用return 语句:

p -> { return p.getGender() == Person.Sex.MALE && p.getAge() >= 18 && p.getAge() <= 25;}

return言语由于不是二个表达式,由此你不可能不将它放置在一对花括号中。可是你不料定再次回到void的办法调用放到花括号中。举例,上边是贰个合法的拉姆da表达式:

email -> System.out.println

鉴于Lambda看起来和措施申明很相像;你能够将Lambda表明式看成是佚名格局。

接下去的亲自去做,Calculator显示了接受二个以上形参的拉姆da用法:

public class Calculator { interface IntegerMath { int operation(int a, int b); } public int operateBinary(int a, int b, IntegerMath op) { return op.operation; } public static void main(String... args) { Calculator myApp = new Calculator(); IntegerMath addition =  -> a + b; IntegerMath subtraction =  -> a - b; System.out.println("40 + 2 = " + myApp.operateBinary(40, 2, addition)); System.out.println("20 - 10 = " + myApp.operateBinary(20, 10, subtraction)); }}

operateBinary方法对多个整数举办数学生运动算。运算的秘籍由IntegerMath实例提供。该示例使用Lambda定义了多个运算,additionsubtraction。以下是身先士卒的出口:

40 + 2 = 4220 - 10 = 10

有个别变量表存放了编写翻译期可见的种种基本数据类型(boolean、byte、char、short、int、float、long、double)和对象引用。当中陆11人长度的long、double会占用2个部分变量空间。其余的占二个上空。

本文由mg4155com发布于mg4155线路检测手机版,转载请注明出处:Java编制程序观念,java8法定文书档案

关键词:

上一篇:有关联合的有个别理念,Java援引类型原理剖判

下一篇:没有了