MyBatis

我的开发日记(二)

大城市里の小女人 提交于 2020-08-15 10:39:12
今天主要做了测试用户模块的基础数据的管理,遇到了一个比较头大的问题,用户属性存的都是 id ,但是返给前端需要转成相应的 string 类型,然后还有各种 非必传 参数的验证,一下子来个这么复杂的 SQL ,特别在是在 mybatis 的 XML 文件中配置,着实让我学习了一阵子。分享一下学习成果。 需求图如下,按照几种筛选条件获取当前用户创建的测试用户列表: 接口文档如下: 里面都是必传参数, string 类型默认 "" , number 默认 0 表示全部。 下面是我的 XML 文件内容: <sql id="table"> qa_test_user </sql> <sql id="user_status"> qa_user_status_name </sql> <sql id="env"> family_base_env </sql> <sql id="user_role"> qa_role_name </sql> <select id="findUsers" parameterType="com.okay.family.common.bean.testuser.SearchUserBean" resultType="com.okay.family.common.bean.testuser.TestUserBean"> select tu.id,tu.descc,tu

Jeewx-Boot 1.2 小程序官网模块发布,免费开源的微信管家平台

我的梦境 提交于 2020-08-15 10:31:03
项目介绍 JeewxBoot是一款基于SpringBoot的开源微信管家系统,采用SpringBoot + Mybatis + Velocity 框架技术。支持微信公众号、微信第三方平台(扫描授权公众号)、抽奖活动、小程序官网等。JeewxBoot实现了微信公众号管理、抽奖活动等基础功能,便于二次开发,可以快速搭建微信应用! 源码下载 https://gitee.com/jeecg/jeewx-boot https://github.com/zhangdaiscott/jeewx-boot 小程序源码 https://gitee.com/jeecg/jeewx-app-cms 升级日志 新增功能 新增CMS后台模块 新增微信小程序官网模块 技术交流 技术文档: http://doc.jeewx.com 技术官网 : www.jeewx.com 演示地址 : http://demo.jeewx.com QQ交流群 : 97460170 视频教程 : 入门视频 项目说明 项目名 中文名 备注 jeewx-boot-start 启动项目 jeewx-boot-base-system 系统用户管理模块 jeewx-boot-module-weixin 微信公众号管理 jeewx-boot-module-api 共通业务API接口 huodong/jeewx-boot-module

Java学到什么程度可以出去实习?

偶尔善良 提交于 2020-08-15 09:58:10
  Java学成什么样子可以出去实习?主要还是看公司需求!   公司类型,规模,对Java程序员的需求的多少,对Java程序员的不同要求,都决定了你学成什么样子可以实习!   但Java基础,数据库,前端,Java web,框架等都是需要有一定的掌握的。如果有项目经验,找工作会更好。当然,如果有更深层次的分布式架构、服务器虚拟化技术、企业开发解决方法等知识,能更好的找到工作哦!   如果你想找工作,下面这套2020年Java中高级程序员学习线路图能帮到你!   一、Java基础   JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。   在Java基础板块中有6个子模块的学习:   1.基础语法,可帮助你建立基本的编程逻辑思维;   2.面向对象,以对象方式去编写优美的Java程序;   3.集合,后期开发中存储数据必备技术;   4.IO,对磁盘文件进行读取和写入基础操作;   5.多线程与并发,提高程序效率;   6.异常,编写代码逻辑更加健全;   7.网络编程,应用服务器学习基础,完成数据的远程传输。   8.学习该阶段,可以完成一些简单的管理系统、坦克大战游戏、QQ通信等。   二、数据库   数据库不仅仅是Java开发工程师的必学课程,也是其他语言都需要掌握的技能。用于对交互过程中客户的数据进行存储。  

SpringBoot源码分析 + 自定义Starter

爷,独闯天下 提交于 2020-08-15 07:38:57
SpringBoot源码分析 + 自定义Starter 注:这里我先讲源码~其实讲完源码,你就懂了为什么可以自定义Starter 源码分析 @SpringBootApplication注解------->组合注解 由以下注解组成: 其中@Targer 、@Retention、@Document、@Inherited四个注解为元注解 @Inherited :父类有标注这个注解,那么子类不需要明确写出来就相当于标注了这个注解。相当于继承。 @SpringBootConfiguration :也是一个组合注解。从源码里可以看到他是由三个元注解+@Configuration组成的一个组合注解。所以其实 它和@Configuration是一个意思,是springboot自己的注解配置 @ComponentScan :扫描~没有指定的情况下,从当前类所在包的开始扫描,也就是扫描当前包及子孙包。如果包太多,可以通过下面两个方法来指定包括或者忽略哪些包,过滤器的作用。 //包括 Filter [ ] includeFilters ( ) default { } ; //忽略 Filter [ ] excludeFilters ( ) default { } ; 重点 :ComponentScan它不做配置扫描的工作,具体的配置扫描由@EnableAutoConfiguration来做。

Mybatis 和 JPA 选用哪个好

99封情书 提交于 2020-08-15 06:36:24
一、事件起因 关于 Mybatis 和 JPA 孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。 我也看过知乎上一些问答,各有各的理由,感觉都挺有道理。如果让我不带感情色彩地去分辨,其实我也是懵的,因为真的是公说公有理婆说婆有理。 而在国内,不得不承认,用 Mybatis 的公司确实是要比用 JPA 的多,但是在 2015 年以前,用 Hibernate 的公司确实也是很多的。 为什么在国内,会有这样的现象发生? 二、目前生态 在最近(2018)的 JVM 生态报告中 可以看出,Mybatis 的占比只有可怜的 6%,大家看到这个统计结果应该会很吃惊,你会觉得,不对啊,我公司以及我很多朋友都在用 Mybatis 啊,好像没听说过有人用 JPA 的,这个统计结果是错的吧? 再从下面这个对比来看,MyBatis 的关注主要集中在中日韩。 首先,必须指出,对于青年程序员,其实都会质疑这个图的可信度。 中老年程序员都在感叹国外其实更注重开发效率和面向对象的分析和设计。但我可以非常负责任地告诉你,这图是真的。那么,造成这种现象的原因是? 三、国人喜欢 Mybatis 的原因 总结起来,有如下原因: 1.大厂带节奏 国内做互联网的 Java 程序很多都是拷贝阿里的,阿里一开始用例 iBatis,大量的老系统都是基于 iBatis/MyBatis 的

Github开源项目(企业信息化基础平台)

久未见 提交于 2020-08-15 06:25:42
JEEPlatform 一款企业信息化开发基础平台,可以用于快速构建企业后台管理系统,集成了OA(办公自动化)、SCM(供应链系统)、ERP(企业资源管理系统)、CMS(内容管理系统)、CRM(客户关系管理系统)等企业系统的通用业务功能。Github链接: https://github.com/u014427391/jeeplatform 欢迎下载或者star(收藏) JeePlatform项目是一款以Activiti为工作流引擎,以Spring Framework为核心框架,集ORM框架Mybatis,Web层框架SpringMVC和多种开源组件框架而成的一款通用基础平台,基于本平台可以实现快速开发,实现企业信息管理的高效、高性能开发。系统追求安全、性能方面的有效实现。 系统设计 系统管理(模块名称jeeplatform-admin) 管理系统登录页面,采用Shiro登录验证 管理系统主页前端,可以适配移动端页面 管理系统主页采用开源前端模板,具有换肤功能 管理系统主页,获取用户具有的权限,显示菜单 角色进行授权,只有超级管理员才具有权限 角色进行配置,可以学习一下RBAC(基于角色的权限控制) 使用JavaEmail插件实现邮件发送,记得需要开启SSl验证 OA管理系统(待开发) CMS管理系统(待开发) 系统升级 单点登录基础(模块名称jeeplatform-sso)(开发中

Mybatis

天大地大妈咪最大 提交于 2020-08-15 05:28:51
package com.dmsd.util; import org.apache.ibatis.session.SqlSession; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * @introduce 处理事务动态代理工具类 * * @author xingMeiLing * @DATE 2020/6/19 **/ public class TransactionInvocationHandler implements InvocationHandler { /*声明需要实现代理的对象target*/ private Object target; public TransactionInvocationHandler(Object target){ this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args){ SqlSession sqlSession = null; Object object = null; try{ sqlSession =

新鲜出炉!阿里Java后端实习面经,已拿offer!

℡╲_俬逩灬. 提交于 2020-08-15 04:46:13
前面给大家分享了一篇字节跳动拿下offer的面经,很多小伙伴都私信我说收获很大,感兴趣的朋友可以回头去看看。很多小伙伴还问我有没有其他大厂的面试题分享,这不他来啦,阿里2020春招面试题给大家整理在下面了! 一面: 1. 触发新生代GC,如果存活对象总量大于survivor区容量,咋办 2. 如果任务很多,线程池的阻塞队列会撑爆内存的哪个区域 3. 栈在堆上吗 4. GC root有哪些 5. 实例变量可以是GC root吗 6. 了解哪些GC算法,介绍一下 7. 给个场景,问怎么设置JVM参数 8. 问了很多SQL调优,各种语句能不能命中索引,能命中哪些,怎么优化 9. MySQL的一张表里有三个字段ABC,A的种类有1000种,B有1W种,C有10W种,ABC的联合索引怎么设置,怎么使用 10. Mybatis # 和 $ 的区别 11. Mybatis接口里的方法和XML里的SQL名可以不一样吗,不一样怎么办 12. Mybatis是如何完成SQL和接口里的方法的映射的(我回答了怎么配置),那你知道它是怎么实现的吗 13. 介绍下Spring的 IOC和AOP 14. 服务器给客户端发送IO流的过程 15. IO和NIO了解多少 16. 线程都有哪些状态,怎么转换的 17. Notify和notifyAll的区别 18. 介绍线程池,不同线程池区别在哪,你平时怎么使用线程池的

程序员思维进阶篇一:好的程序员和好的教师相似之处

限于喜欢 提交于 2020-08-15 03:10:48
好的程序员:代码要有好的命名 写代码时需要有好的命名是因为,代码是写给人看的,所以应该假设对方是个仅仅在大学里面上过c语言课的水平,然后让这样的人能看懂,这样,你写的代码某种层面上才是不错的水平。 好的教师:讲课要通俗易懂 同理,课是讲给人听的,我们就应该假设这个人只有接受过普通人的理解力,讲的东西应该通俗易懂,这样,你讲的课在某种意义上才是不错的水平。 提升表达能力:抽象层次 程序员写代码,不单单是为了写几个需求,也要让未来看代码的人能看懂;老师教课,不单单是为了就是把知识讲出来,也要让自己的学生听懂。 他们的相似之处,一个是通过代码来进行表达,一个是通过语言来进行表达。 我认为,在表达的时候都要注意抽象层次这个概念。这样来解释,对于程序员而言,抽象层次的概念就是让代码 有统一的组织结构和同一语义表达的意义。 组织结构 这个就类似于这篇文章[抽象层次]这一目录的排版,这一个目录三段话,表达的逻辑应该在同一层次上, 同一语义 这个就类似于这篇文章整体的语义结构,一层是每章主题的抽象,一层是这章主题的具体表述。 对于老师而言,一个很复杂的东西,比如让你描述jdbc跟mybatis的区别,你可以用这就是走路跟坐车的区别,这是 高层的抽象层次 ,你也可以用一个是接口跟一个是封装接口的框架的区别来表述,这是 中层的抽象层次 ,然后,你也可以深入代码细节来讲述内部细节,这是

mybatis mysql 10 万 100 万 百万 以上并发写 批量保存插入 返回主键 id 优化方案

▼魔方 西西 提交于 2020-08-15 01:59:06
1、数据库一定安装在linux系统上面,这样比较稳定,如果配置读写分离也可以。 2、数据库连接url后面追加&rewriteBatchedStatements=true,至于原因请大家去看jdbc驱动里面PreparedStatement源码 3、上代码: Connection connection= null; PreparedStatement ps = null; PreparedStatement ps2 = null; ResultSet rs=null; try { //从当前sqlsession获取连接,相当于把后面的批量插入的事务交给当前事务管理。如果是纯jdbc需要自己手动去管理 connection= sqlSessionTemplate.getConnection(); ps = connection.prepareStatement( "insert into xxx(id,name) values(?,?)", PreparedStatement.RETURN_GENERATED_KEYS );//返回自增主键配置 for (int i = 0; i < details.size(); i++) { SampleDetail sampleDetail= details.get(i); ps.setInt(1,sampleDetail.getId());