sqlSessionFactory–顾名思义, 这是一个sqlSession工厂可以产生很多sqlSession
在让mybatis知道数据库的位置, 并且写入相应SQL语句, 将对象交付给sqlSession, 由sqlSession来负责将将对象转化, 并将转化后的对象存放进数据库
与之相比hibernate只需知道数据库的位置, 将对象交付给它, 它就会自动生成SQL语句, 但自动生成的SQL语句往往不尽如人意, 一些SQL语句往往无法通过DBA(数据库管理员)的审核
因此, 我们更多建议使用mybatis
数据池化, 所有数据库连接会一次取出很多数据放在连接池中缓存,可以大幅提高创建连接的效率
数据源本质上就是连接池, 一个存储结构, 内部放了很多连接对象
新建包, 包名为"edu.mju.stuwork.config"
一般mybatis的配置文件我们命名为mybatis-config.xml
mybatis文件中记录了: 1.数据库位置等信息
注:并不是在文件中直接把数据的接口, 地址, 操作用户直接写死. 具体的信息一般放在一个名为db.properties的文件中, mybatis文件只需与之关联, 就可以获取相应的数据. 当数据库位置修改时,只需要修改db.properties文件中的数据即可
2.说明mybatis映射文件所在位置(mapper文件信息)(一个Dao一个映射文件, 可能一般放在domain文件夹中)
注:映射文件中存放所有业务需要的SQL语句
新建xml文件, 命名为mybatis-config
将头文件信息复制出来
接下来配置db.properties文件
配置db.properties文件
导入和关联数据库信息存储的属性文件(导入db.properties), 文件路径通过"Copy Qualified Name"复制, 并将最前面的工程名路径与src删除
配置多种数据库, 一般使用两个数据库, 一个为"开发库", 一个为"产品库", 一般会将默认数据库环境设置为开发库, 让工程师测试运行, 产品"上线"的时候会将默认数据库设定为"产品库", 从开发到上传上去给用户使用, 这个过程被称为"上线"
设置数据源的类型, 为POLLED(池化)(连接池)
根据变量名, 使用$将数据从数据库信息存储的属性文件中取出, 架构透过name进而获取到value的值, 进而获取数据库信息存储的属性
接下来配置映射文件
配置映射文件(存放SQL语句)
将映射文件导入, 文件地址设定为, 相对包的根目录的路径, 以将映射文件导入
在文件里填写用于连接数据库的信息, 包括数据库的IP, 端口, 用于连接数据库的用户名以及密码
配置db.properties文件之后
一般来说, 一个domain一个映射文件
在domain包下新建一个xml文件, 命名为StudentMapper.xml
映射文件当中包含着所有的Dao操作
将相应头文件信息复制出来, 对mapper设定namespace, 这是这个mapper唯一的名字.
目的是为了标识当前Mapper, 避免执行时, 本Mapper与其他Mapper下的映射条目名称相同, 进而产生冲突.
设定映射条目, 映射条目的标签名对应你想要的操作, 例如: insert, update, select, delete.
映射文件中存放着所有的Dao方法, Dao方法中有几个, 映射条目就有几个
对映射条目设定id, 一般设定为具体的操作目的, 例如: “addStudent”
设定映射条目的parameterType, 要求内容为完全路径, mapper 的"namespace" + “.” + 映射条目的"id"
但为了书写方便, 并且能够不重复写那么长一串类名, 我们通常在配置文件里设定一个默认package, 默认选用这个包
之后在映射条件中书写SQL语句, 其中原本SQL语句中的问号改为"#{实体类型中的数据变量名}"
配置映射文件后
该类主要作用时启动mybatis, 得到session, 及关闭session
在Utils包下新建一个类, 命名为"MybatisUtils"
在导入包之前应先导入mybatis库
导入Mybatis库
声明相应SQL session Factory对象, eclipse中使用CTRL+shift+o组合键自动导入相应库
此时会发现库文件名称里居然有"ibatis"而没有"mybatis"—据说"mybatis"以前叫"ibatis"
在GitHub下载,点击链接
Releases · mybatis/mybatis-3 · GitHub
选择版本下载压缩包并解压, 在解压后的文件夹中找到(我下载的是3.5.6)
mybatis-3.5.6.jar
打开文件夹lib, 在文件夹中找到
log4j-1.2.17.jar
commons-logging-1.2.jar
这两个库mybatis在运行过程中用来做日志
将这三个文件复制到工程中的WebContent->WEB-INF->lib中
导入Mybatis库之后
在dao包中新建StudentDaoMybatisImpl类, 添加接口StudentDao
将函数重写
public class StudentDaoMybatisImpl implements StudentDao { @Override public void addStu(Student stu) { // TODO Auto-generated method stub // 新建一个SQL session SqlSession session = MybatisUtils.getSession(); // 将对象通过session进行新增 // 括号中的字符串代表的是使用的映射条目全称, stu是要导入数据库的实体 session.insert("edu.mju.stuwork.StudentMapper.addStudent", stu); // 将对数据库的修改进行提交 session.commit(); // 通过相应函数将session释放 MybatisUtils.closeSession(session); } }找到原来调用JDBCDao进行新增的函数, 将JDBCDao替换为StudentDaoMybatisImpl
public void regStudent(Student stu) { // StudentDao stuDao = new StudentDaoJDBCImpl(); // 替换Dao, 接口的好处显现出来了, 除了修改了类其他什么都不影响 StudentDao stuDao = new StudentDaoMybatisImpl(); stuDao.addStu(stu); // TODO Auto-generated method stub }建立一个log4j.properties文件, 将以下内容粘贴至项目的src目录下
并将
log4j.appender.dailyRollingFile.File = 此处替换为你为日志文件设置的存储路径/log.txt
里的中文替换为你为日志文件设置的存储路径
注:电脑文件管理器地址栏中复制进来的路径不可直接使用
原因是: Java中的 ”\“ 为转义字符, 无法用来表示路径
因此: 需将电脑文件管理器地址栏中复制进来的路径中的所有 “\” 替换为 “/” 才可以达到目的效果
# # Log4J Settings for log4j 1.2.x (via jakarta-commons-logging) # # The five logging levels used by Log are (in order): # # 1. DEBUG (the least serious) # 2. INFO # 3. WARN # 4. ERROR # 5. FATAL (the most serious) # Set root logger level to WARN and append to stdout log4j.rootLogger=debug, stdout,dailyRollingFile #appender: stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n #appender: dailyRollingFile log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender log4j.appender.dailyRollingFile.File = 此处替换为你为日志文件设置的存储路径/log.txt log4j.appender.dailyRollingFile.Append = true log4j.appender.dailyRollingFile.Threshold = DEBUG log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout log4j.appender.dailyRollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n # Print only messages of level ERROR or above in the package noModule. log4j.logger.noModule=FATAL #log4j.logger.com.opensymphony.xwork2=INFO #log4j.logger.com.abc.test=debug最后执行项目, 测试是否能够成功执行增加操作