一、Mybatis框架配置
- 1、加入Mybatis驱动包 :mybatis-3.3.1.jar
- 2、导入Mybatis配置文件:F:\java\Mybatis\mybatis包和代码\mybatis-3-mybatis-3.3.1源码包 \src\test\java\org\apache\ibatis\submitted\complex_property的Configuration.xml文件 。直接将Configuration.xml文件拷入项目中,修改其中内容。
二、Mybatis通过SqlSession对象实现Dao层的需求
Dao需求:
- 1、对象能与数据库交互
- 2、能执行SQL语句
SqlSession作用:
- 1、向SQL语句中传入参数。
- 2、执行SQL语句。
- 3、获取执行SQL语句结果。
- 4、事务的控制。
获得SQLSession对象
- 1、通过配置文件获得数据库连接相关信息。
Reader reader=Resources.getResourceAsReader("包名/myBatis配置文件名");从根目录src下开始写,此时写的是路径,应该用“/”而不是“.”。 - 2、通过配置信息构建SqlSessionFactory。
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); - 3、通过SqlSessionFactory打开一个数据库会话。
SqlSession sqlSession=sqlSessionFactory.openSession();
public ListqueryMessageList(String command,String description)
{
DbAccess dbAccess=new DbAccess ();
ListmessageList=new ArrayList();
SqlSession sqlSession = null;
try {
sqlSession = dbAccess.getSqlSession;
//通过sqlSession执行SQL语句,find表示配置文件中的id
messageList=sqlSession.selectList("User.find")
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(sqlSession != null)
{
sqlSession.close();
}
}
}
通过SqlSession执行SQL语句
- 添加配置文件:F:\java\Mybatis\mybatis包和代码\mybatis-3-mybatis-3.3.1源码包 \src\test\java\org\apache\ibatis\submitted\complex_property的User.xml文件。直接将文件拷入项目自己新建的包中。
DELETE FROM user WHERE id = #{id:INTEGER}
INSERT INTO user
( id,
username,
password,
administrator
)
VALUES
( #{id},
#{username,jdbcType=VARCHAR},
#{password.encrypted:VARCHAR},
#{administrator,jdbcType=BOOLEAN}
)
UPDATE user SET
username = #{username,jdbcType=VARCHAR},
password = #{password.encrypted,jdbcType=VARCHAR},
administrator = #{administrator,jdbcType=BOOLEAN}
WHERE
id = #{id,jdbcType=INTEGER}
可以通过配置文件中的select中的id信息调用不同的SQL语句执行,id的名字必须唯一;如果有多个配置文件,文件中的id想要重复命名,可以通过“
sqlSession.select("Message.find")
数据库中的字段与Java类中的属性对应
通过配置文件实现
//type表示类的全名,包括包名;id同sql语句中的id
子标签包括id标签和result标签,如果数据库中一个字段为主键是用id标签,如果是普通的列就用result标签。column表示数据库中的字段名,property表示类中的对象名。数据库中的字段类型与jdbcType中的类型或者Type类下面的常量名有对应关系。
最后将这个配置文件添加到核心配置文件中
三、SQL语句拼接
配置文件中的select接受参数时(用parameterType接受传递的参数,只写传递参数的类型,不写参数名),只能接受一个,如果Java代码要传递两个或以上参数,需要进行封装,然后进行传递。
ONGL表达式(区分大小写)
应用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:为不同包配不同的级别,把总的覆盖,可看到自己想看的信息
log4j配置详解
一、log4j.rootLogger=INFO, stdout, R
第一个参数为等级,后面可跟一到多个参数,为输出的位置;
例句的意思为将等级为INFO的日志信息使用stdout和R进行输出,stdout和R可以自己命名;
等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,OFF是关闭,不输出任何信息,其他级别按这个顺序依次降低,如果 指定一个级别,如INFO,则比该级别高的信息都会输出
四、对应关系
- 1、一对多关系
Java代码中反应一对多关系是通过主表中包含一个子表的集合;xml中反应一对多关系,和Java代码一样,用collection标签实现。
注意:column表示数据库中的列名,此时的列名并不是数据库表中的列名,而是select语句查询结果集的列名,两者可能不相同,select语句中可以设置别名。
五、常用标签
六、接口编程
意义:为了规范如何去访问配置文件,为了规避namespace.与sql关联的id,传入的参数,返回值这种写法容易出错的毛病,采用接口试编程。
- mybatis接口式编程的步骤:
1.创建一个接口
2.统一命名空间【接口所在类的全线类名作为xml文件的namespace】
2.想要为哪条SQL语句代言,就在接口中定义和id相同名的方法
3.SQL语句的返回值类型就是接口的返回值类型
Dao层中MessageDao类新建一个方法,想要查询数据表Message中的信息。首先新建一个接口IMessage,接口中创建一个方法queryMessage(),然后再Message配置文件中新建一个select标签,标签id为方法名queryMessage,并在标签中填写完整的SQL语句,MessageDao类中可以直接调用接口使用,通过SqlSession获取接口(IMessage imessage=sqlSession.getMapper(IMessage.class);),然后通过接口调用其中的方法(imessage.queryMessage),获取数据库中的信息