mybatis相关知识
来源:互联网 发布:nodejs 官网cms 编辑:程序博客网 时间:2024/06/06 01:37
构建Mybatis项目
Mybatis 相关 Jar包下载路径: https://github.com/mybatis/mybatis-3/releases
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis使用简单的 XML 或注解来配置和映射基本体,将接口和Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。相比Hirbernate,Mybatis更加灵活。
构建Mybatis项目步骤:
一:创建项目,导入jar包,Mybatis只有一个jar包mybatis-3.2.4.jar,和(我用的是oracle)数据库驱动包ojdbc6.jar
二:建立XML 配置文件:src/mybatis-config.xml(名字可以随便取,随便在哪个目录下,在程序中对应就行),此配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务范围和控制方式的事务管理器(TransactionManager)。
三:建立实体(如:Emp),和实体映射文件(Emp.xml),此映射文件中主要包含了sql语句的映射。并将Emp.xml配置到mybatis-config.xml中去
四:具体数据库操作,创建SqlSessionFactory和SqlSession,进行增删改查操作
目录结构如下:
mybatis-config.xml示例内容如下:
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManagertype="JDBC"/>
<dataSource type="POOLED">
<property name="driver"value="oracle.jdbc.driver.OracleDriver"/>
<property name="url"value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<propertyname="username" value="scott"/>
<propertyname="password" value="tiger"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapperresource="model/Emp.xml"/>//类说对应的配置文件
</mappers>
</configuration>
Emp.xml示例如下:
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="model.Emp">
<select id="selectEmpById"resultType="model.Emp">
select * fromemp where empno = #{id}
</select>
</mapper>
创建SqlSessionFactory和SqlSession,因为根据empno查询只有一条数据所以用selectOne()方法
String resource ="mybatis-config.xml";
InputStream inputStream =Resources.getResourceAsStream(resource);
sqlSessionFactory = newSqlSessionFactoryBuilder().build(inputStream);
SqlSession session =sf.openSession();
Emp emp =(Emp)session.selectOne("model.Emp.selectEmpById",7499);
System.out.println(emp);
基于oracle批量insert
<insertid="batchInsertEmp" parameterType="java.util.List">
insert intoemp(empno,ename,job,mgr,hirdate,sal,comm,dept)
<foreach collection="list"index="index" item="item" separator="union all">
(select #{item.empno ,jdbcType= INTEGER},
#{item.empno,jdbcType= VARCHAR},
#{item.job,jdbcType= VARCHAR},
#{item.mgr,jdbcType= INTEGER},
to_date(#{item.hirdate,jdbcType=VARCHAR},'yyyy-MM-dd'),
#{item.sal,jdbcType=INTEGER},
#{item.comm,jdbcType=INTEGER},
#{item.dept,jdbcType=INTEGER} from dual)
</foreach>
</insert>
需要重点注意的是sql中没有values,和<foreach>标签中的(selece ..... from dual)还有foreach标签中的separator属性值为"union all".
Stringresource = "mybatis-config.xml";
InputStream inputStream =Resources.getResourceAsStream(resource);
SqlSessionFactory sf = newSqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
List<emp>emplist = new ArrayList<Emp>();
emplist.add(newEmp(……));
session.insert("econ.lottery.model.Lottery.batchInsertLottery",emplist);
session.commit();
session.close();
在sql映射xml文件中,有以下几个灵活标签:
if,choose (when, otherwise),trim (where, set),foreach
应用log4j(日志)调试动态SQL:
1、jar包和配置文件
2、log4j.properties
<1>log4j.rootLogger=DEBUG,Console:输出级别(级别<由低到高>debug/info/warn/error)和输出位置(控制台)
<2>log4j.appender.Console=org.apache.log4j.ConsoleAppender:配置这个类才会输出在控制台(可在别处)
<3>log4j.appender.layout=org.apache.log4j.PatternLayout:布局(按照自己的想法去输出)<4>log4j.appender.layout.ConversionPattern=%d[%t] %-5p [%c] - %m%n:
%d:产生日志的时间
[%t]:产生日志所处线程的线程名称
%-5p:输出日志的级别、
"5":代表输出的字符会占5位字符,不足则会用空格补齐;
"-":指的是补齐的空格在右边,没有则在左边.
[%c]:指输出这个日志时处于的那个类的全名,包括包名
%m:输出的时候附加的信息
%n输出换行
<5>log4j.logger.org.apache=INFO:为不同包配不同的级别,把总的覆盖,可看到自己想看的信息
1、配置文件的详细路径:
src\test\java\org\apache\ibatis\submitted\complex_property\Configuration.xml
2、Mybatis之SqlSession
SqlSession的作用:
<1>向SQL语句传入参数
<2>执行SQL语句
<3>获取执行SQL语句的结果
<4>事物的控制
如何得到SqlSession:
<1>通过配置文件获取数据库连接相关信息
<2>通过配置信息构建SqlSessionFactory
<3>通过SqlSessionFactory打开数据库会话
Ctrl+shift+J生成方法注释
servlet里面一般做的事:1.接受页面的值2.向页面传值3.根据业务需要调用service4.向页面跳转
1、 注意项目命名规范,用英文命名、不能用全拼;
2、 添加合理的注释有助于程序维护;
3、 页面放在web-inf下便于控制和管理;
4、 通过文件夹合理管理各类文件;
log4j配置详解
● log4j.rootLogger=INFO, stdout, R
u ● 第一个参数为等级,后面可跟一到多个参数,为输出的位置;
● 例句的意思为将等级为INFO的日志信息使用stdout和R进行输出,stdout和R可以自己命名;
● 等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,OFF是关闭,不输出任何信息,其他级别按这个顺序依次降低,如果指定一个级别,如INFO,则比该级别高的信息都会输出,此时会输出FATAL、ERROR、WARN、INFO级别的信息。
u 二、log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.option=value
u ● 此处的stdout要与第1条中出现的名称对应,后面出现这个名称的地方都需如此,不再复述;
● 定义stdout的输出端类型,以及属性选项配置,可以有下面几种类型:
org.apache.log4j.ConsoleAppender(输出在控制台)
org.apache.log4j.FileAppender(输出到文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),可通过 log4j.appender.R.MaxFileSize=100KB设置文件大小,还可通过 log4j.appender.R.MaxBackupIndex=1设置为保存一个备份文件
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
● 关于log4j.appender.stdout.option=value属性选项配置,此处option与value可以为以下指定的内容:
u ○ 输出端共同选项:
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
u ○ ConsoleAppender选项:
Target=System.err:默认情况下是:System.out,指定输出控制台
u ○ 文件输出端共同选项:
File=mylog.txt:指定消息输出到mylog.txt文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
u ○ DailyRollingFileAppender选项:
DatePattern=yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
1)yyyy-MM: 每月
2)yyyy-ww: 每周
3)yyyy-MM-dd: 每天
4)yyyy-MM-dd-a: 每天两次
5)yyyy-MM-dd-HH: 每小时
6)yyyy-MM-dd-HH-mm: 每分钟
u ○ RollingFileAppender选项:
MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
u ○ 根据上面的说明,给出的样例配置:
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=D:\\logs\\APPName.log
此处R与stdout类似,要与第1条中出现的名称对应
定义R的输出端为输出到文件,并且文件大小到达指定尺寸的时候产生一个新的文件
定义R的输出端的文件名为D:\\logs\\APPName.log,该路径与名称可以自行修改。
● log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
u 定义stdout的输出端layout,layout可以有下面几种类型:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
● log4j.appender.stdout.layout.ConversionPattern= [APPName]%p [%t] %C.%M(%L) | %m%n
u ● 如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,具体参数:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为"rn”,Unix平台为"n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个”%”字符
%F: 输出日志消息产生时所在的文件名称
%M: 输出执行方法
%L: 输出代码中的行号
u ● 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1) c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,”-”号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4) .30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。
[APPName]是log信息的开头,可以为任意字符,一般为项目简称。
● log4j.logger.com.johnny=DEBUG
u 自定义各个包中日志级别,指定com.johnny包下的所有类的等级为DEBUG。
● 加载自己的配置文件:
u log4j默认加载类路径下的log4j.properties文件,如果自定义其他名称的properties文件的时候,就需要使用PropertyConfigurator.configure(“FilePath”)来加载配置文件,这里要注意一下配置文件的路径:
u 针对java项目:
绝对路径 -- F:\\test\\log4jSelf.properties;
这个就不用多说了,如果不是web项目的话,写绝对路径那就是硬盘上的全路径了
相对路径 -- src/youFileName.properties
log4j默认的当前路径工程下面,即跟src同级目录,了解这点相信相对路径大家都手到擒来了,或者类加载器获得路径也可以;
u 针对web项目:
getRealPath获得路径加上文件名
定义SQL3
INSERT
UPDATE
DELETE
SELECT
配置Java对象属性与查询结果集中列名对应关系
resultMap
控制动态SQL拼接
Foreach
if
Choose---when---otherwise
格式化输出
Where 以and或or等开头的去掉
Set 以“,”等结尾的去掉
Trim
配置关联关系
Collection (主表)
Association(字表)
定义常量
Sql(不一定是完整的sql语句)
引用常量
Include
- mybatis相关知识
- Mybatis 相关知识(一)
- 电商之梳理mybatis相关知识---开发基础框架
- MyBatis相关
- mybatis相关
- MyBatis一些知识
- MyBatis知识详解
- mybatis 知识1
- mybatis知识解惑
- MyBatis 知识概览
- MyBatis知识简介
- Mybatis零碎知识小结
- 相关reactjs的相关知识
- mybatis配置相关问题
- MyBatis 相关下载
- mybatis技术相关
- mybatis相关1
- 0032-mybatis相关标签
- 软件工程作业二
- 线程池NSoperationQueue和GCD比较
- Android源码分析---JNI浅尝
- ping: sendto: Network is unreachable
- 在C++中关于颜色值和十六进制字符串之间的转换
- mybatis相关知识
- debian 7 调整控制台分辨率
- UIApplication 用法解析
- 在电脑上安装Linux操作系统(ubuntu)
- 选择器UIPickerView
- WAMP两个小经验笔记
- java.util.ConcurrentModificationException异常分析
- 上传本地相册或者相机图片
- 在字符串中统计特定字符串的个数