mybatis学习总结
mybatis依赖
日志工具
引入相关依赖
在全局配置文件中添加相应的setting设置
在resources目录下建立log4j.properties配置文件,并在内部做出相应修改
org.mybatis mybatis 3.5.0
mysql mysql-connector-java 5.1.46
log4j log4j 1.2.17
# rootLogger是所有日志的根日志,修改该日志属性将对所有日志起作用 # 下面的属性配置中,所有日志的输出级别是ERROR,(可以设info),输出源是con log4j.rootLogger=ERROR, con #mapper运行日志 mybatis-config.xml Mybatis的全局配置文件 log4j.logger.cn.cxh.mapper=DEBUG # 定义输出源的输出位置是控制台 log4j.appender.stdout=org.apache.log4j.ConsoleAppender # 定义输出日志的布局采用的类 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #可以灵活地指定日志输出格式,下面一行是指定具体的格式 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n #文件大小到达指定尺寸的时候产生一个新的文件 log4j.appender.File = org.apache.log4j.RollingFileAppender #指定输出目录 log4j.appender.File.File = logs/ssm.log #定义文件最大大小 log4j.appender.File.MaxFileSize = 10MB # 输出所以日志,如果换成DEBUG表示输出DEBUG以上级别日志 log4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n <?xml version="1.0" encoding="UTF-8" ?>
两种mapper引入方法:直接引入配置文件,引入实体类所在的包 UserMapper.xml 对相应数据表的GRUD操作的语句都写于该配置文件中 #{}和${} #{} 只是替换?,相当于PreparedStatement使用占位符去替换参数,可以防止sql注入。 是进行字符串拼接,相当 于sql语句中的Statement,使用字符串去拼接sql; 是进行字符串拼接,相当于sql语句中的Statement,使用字符串去拼接sql;可以是sql中的任一部分传入到 Statement中,不能防止sql注入。 注:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服 务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的 能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者 意图去执行SQL语句。 MybatisUtil.java工具类 用与返回SqlSession
<?xml version="1.0" encoding="UTF-8" ?>
insert into user_info(user_name,user_pass,user_phone) values(#{userName},# {userPass},#{userPhone}) UserMapper.java package cn.cxh.util; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; /** * 单例类,在程序中仅有一个类 * @author 绪志 * */ public class MybatisUtil { private static SqlSessionFactory sqlSessionFactory; /** * 静态代码块,在程序的所有运行过程中,该代码块仅执行一次,类似于单例 */ static { //指定全局配置文件 String resource="mybatisConfig.xml"; InputStream in=null; try { //读取配置文件 in = Resources.getResourceAsStream(resource); //构建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); }finally { if(in != null){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static SqlSession getSession(){ //返回SqlSession return sqlSessionFactory.openSession(); } } SQL语句 select复合查询语句 推荐使用注解方法 @Param() 通过Javabean进行参数传递 在传入多个javabean时,在接收参数时可以使用param1.XXX,此方法是不友好的,可以在定义方法时使用@Param 注解, 例:@Param(“a”) User user==========使用时可以使用"a.XXX" 通过hashmap进行参数传递 package cn.cxh.mapper; import cn.cxh.entity.Use; /** * 该接口中主要是对UserInfo实体类的GRUD操作,不需要实现该接口,仅需要在UserInfoMapper.xml中添加相应的 sql语句既可 * * */ public interface UserInfoMapper { int insert(UserInfo userInfo); } /** * 通过name和gender进行复合查询,通过注解可以在mapper的配置文件中直接使用#{name}和#{gender}来接收 参数 * 否则必须使用mybatis默认的参数接收方式,param1,param2或者arg0,arg1 * 推荐使用注解的方式来进行传递参数 * @param name * @param gender * @return */ User queryByNameGender(@Param("name") String name,@Param("gender") String gender); /** * 通过javabean来传递参数 * mapper.xml中调用参数时只需要使用实体类中的属性名即可 * @param user * @return */ User queryByNameGender1(User user); 动态SQL if choose (when, otherwise) trim (where, set) foreach bind sql if 动态 SQL 通常要做的事情是根据条件包含 where 子句的一部分。比如: 在使用where条件是可以使用专门的标签,从而使mybatis自动处理查询条件前面的‘and’关键字,推荐在所有的if语 句中所有的查询关键字前面都加上and关键字,即使是第一个在其内容中也要加入and关键字,因为mybatis会帮我 们处理好这个and关键字,例如 /** * 通过hashmap传参 *在mapper中按照键的名称取值 * @return */ User queryByNameGender2(Map