fyzn12
RSS SITEMAP

Articles

  • Mybatis之动态SQL

    动态SQL语句总结 主要内容 if元素 choose、when、otherwise元素 trim、where、set元素 foreach元素 if 元素 下面先看一个例子 <select id="selectUserById" resultType="MyUser" parameterType="MyUser"> select * from user where 1=1 <if test ="name !=null and name !=''"> and name like concat('%',#{name},'%') </if> <if test = "sex !=null and sex !=''"> and sex = #{sex} </if> </select> 在上面的例子中,运用的是sql语句的拼接,在这里需要注意的是有如下几点: 1. resultType与resultMap不能同时使用 2. #{xxx}与${vlaue}的使用看上一篇博客 3. if的判断条件的test里面的参数目前我知道有三种声明方式如下: 1)对象作为参数,则test里面的参数为对象的属性 2)@Param声明的参数 3)map方式键值对 choose、when 、otherwise元素 有些时候不想用到所以的条件语句,而只想从中选择一二,针对这种情况,Mybatis提供了<choose>元素,如下例子。 <select id = "selectUserBychoose" resultType="MyUser" parameterType="MyUser"> select * from user where 1=1 <choose> <when test="name !
  • Ssm随学札记

    使用在使用ObjectMapper将json转对象,调用mapper.readValue(jsonStr, XwjUser.class)时,报如下错: java.lang.NullPointerException at com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:889) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004) at com.express.utils.JsonUtils.jsonToPojo(JsonUtils.java:48) at com.express.web.controller.backstage.ManagerBaseController.getCurrentUser(ManagerBaseController.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) at org.springframework.web.method.annotation.ModelFactory.invokeModelAttributeMethods(ModelFactory.java:142) at org.springframework.web.method.annotation.ModelFactory.initModel(ModelFactory.java:111) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:872) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) 这个错误产生的原因有三个: 1. 是因为在使用ObjectMapper将json转为对象时,会默认调用该对象的无参构造函数,因此在该对象类中加入无参构造函数即可去掉该错误。 2. 期待转成的对象与json对应的属性不匹配。 3. 真正的空指针,既json为空。 ajax提交的几个坑 通过ajax提交数据,在后台是无法进行重定向的,只能通过前端进行重定向。具体如何实现如下: * 判断满足需要重定向时,需要修改返回前端的Header以及Status,并设置拦截(当然这个可以不用)。 * 编写redirectUtil工具类,处理后台跳转,这里需要注意,设置 response.setStatus(HttpServletResponse.SC_FORBIDDEN);之后前端会被拦截,报403错误,代表服务端终止,前端进行操作。 /** *@author fyzn12 *@version 1.0 *@date 2020/4/18 13:46 *主要作用于ajax请求,后台重定向 *提供日志接口 *提供获取具体日志对象的方法 */ @Slf4j public class RedirecUtil { public static void redirect(HttpServletRequest request,HttpServletResponse response,String redirectUrl){ try { /* *如果是ajax请求 **/ String ajax = "XMLHttpRequest"; String header = "X-Requested-With"; if(ajax.
  • Mybatis-的配置文件

    Mybatis的配置文件以及mapper文件 在mybatis的配置文件中,所有的配置均是在 <configuration></configuration>`这对标签里配置。在这里记录一些课堂老师讲解的重要配置。 <configuration> 1.配置日志(开启日志)通过```<settings></settings>```标签配置,如下所示: <!-- 开启日志 --> <settings> <setting name="logImpl" value="LOG4J"/> </settings> 2.为了提高效率,在mapper文件不用每个resultType属性里都添加包名,设置别名。设置在typeAliases标签里,如下两种方式配置,优点和缺点 <typeAliases> <typeAlia type="com.pojo.Student"alias="Student"/>--方法一 缺点:有多少个类,就得有多少行这个代码 <!-- 或者<package name="com.pojo/>" --方法二 缺点: 在pojo包下如果还有子包,在子包下有与子包同级的类名相同时,会出现歧义,不知指定的是哪个包。 </typeAliases> 3.数据库连接的配置 <environments default="default"> <!--配置多个数据源,但只能指定一个使用 --> <!-- Mysql的数据库链接 --> <environment id="default"> <transactionManager type="JDBC"/><!-- 指定当前数据库的事务管理方式 --> <dataSource type="POOLED"><!-- 数据源的管理方式为连接池 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="dbc:mysql://localhost:3306/ssmLab4046?serverTimezone=GMT%2B8"/> <property name="username" value="root"/> <property name="password" value="1234"/> <!-- 设定数据库的链接4要素 --> </dataSource> </environment> 4.映射文件的扫面通过标签配置。 <!-- 一定是文件格式--> <mappers> <mapper resource="com/mapper/StudentMapper.xml"/> </mappers> </configuration> <mapper></mapper> mapper文件配置以及对应方法的讲解 mapper配置时设置的属性namespace定义一个操作包,是映射文件匹配的重要点;
  • Mybatis之mapper接口编程

    面向接口编程的思路 创建pojo(javaBean)类 创建接口 创建接口对应的mapper文件 注意: 1)mapper文件名必须和接口名相同,如接口名为ITeacher则mapper名为ITeacher(并且在同一个包下,实践得到),如果使用扫描包的方式,那么两者必须在同一个包下,如 如果用读取文件的方式,则不用在同一个包下如下 <mappers> <mapper resource="mapper/*.xml"/> </mappers> 2)mapper文件的namespace取值必须和接口的全路径相同 3)mapper中的SQL声明的id必须和接口中的方法名相同,如接口中声明方法seleteAll则sql的id必须为seleteAll 4)多参传递可以不写parameterType属性 5)参数的下标书写 <selete * from teacher where name=#{0} and age=#{1}表示方法中传的参数的第一个参数和第二个参数 6)参数的占位书写 7)参数的声明书写 方法中用@Param声明。 4. 读取mybatis-config.xml文件获取数据库的连接,以及读取mapper文件,得到InputStream对象,创建SqlSessionFactory对象,利用SqlSessionFactory对象建立session连接通过openSession()方法 InputStream is; try { //1.利用org.apache.ibatis.io.Resources方法读取mybatis-config.xml is = Resources.getResourceAsStream("mybatis-config.xml"); // 2.通过文件流,创建一个sqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder() .build(is); // 3.通过工厂创建一个数据库的连接session session = factory.openSession(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }  
  • 多线程: 一般来说设置多少个线程与操作系统的核数关,充分利用cpu 实际当中并不是有多少核就设置多少个线程,存在一个压测行为,找到最高效率线程数 线程数计算.png