先導jar包
mybatis-3.4.6.jar
mysql-connector-java-5.1.39.jar
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<environments default="development">
<!-- 代表連接數據庫的環境信息 -->
<environment id="development">
<!-- 配置事務管理器 type="jdbc" 事務 要么一起成功,要么一起失敗 -->
<transactionManager type="jdbc"/>
<!-- 配置數據源信息 type="jdbc / pooled / unpooled" jdbc 連接方式 pooled 連接池技術-->
<dataSource type="pooled">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 引入映射文件的路徑信息 -->
<mapper class="com.mypack.dao.UserDao"/>
</mappers>
</configuration>
注釋:這個xml文件必須遵循標簽的先后順序(properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,
objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?,
mappers?)
創建屬性文件 db.properties
引入時用:<properties resource="db.properties"/>
根據數據庫里的表創建實體類,
創建dao層接口,里面實行具體的sql語句
@Select("select * from users")
public List<Users> queryAllUsers();
第二種配置映射文件的方法
dao層包下的類與xml映射文件名稱相同
xml代碼:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper namespace="com.mypack.mapper.UserMapper" namespace表示命名空間 一般寫 成包名.文件名-->
<mapper namespace="com.mypack.dao.StudentDao">
<!-- 配置屬性和字段映射關系 一對一關系-->
<resultMap type="Student" id="studentResultMap">
<id property="sid" column="s_id"/>
<result property="sname" column="s_name"/>
<association property="banji" javaType="BanJI">
<id property="cid" column="c_id"/>
<result property="cname" column="c_name"/>
</association>
</resultMap>
<select id="queryOneStuById" parameterType="int" resultMap="studentResultMap">
select * from student s,class c where s.class_id =c.c_id and s.s_id=#{sid}
</select>
</mapper>
dao.java代碼:
import com.mypack.entity.Student;
public interface StudentDao{
public Student queryOneStuById(int id);
}
測試類
@Test
public void testQueryAll(){
SqlSession session = MyBatisUtil.getSqlSession();
UserDao userdao = session.getMapper(UserDao.class);
List<Users> queryAllUsers = userdao.queryAllUsers();
for (Users users : queryAllUsers) {
System.out.println(users);
}
session.close();
}
MybatisUtil類代碼:
public class MyBatisUtil {
public static SqlSessionFactory getSqlSessionFactory(){
// mybatis的配置文件
String resource = "mybatis.xml";
// 使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(
resource);
// 構建sqlSession的工廠
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
.build(is);
return sessionFactory;
}
public static SqlSession getSqlSession(){
return getSqlSessionFactory().openSession(true);
}
}
配置別名
<!-- 別名配置 -->
<!-- 配置方式一 -->
<!-- //單個重命名
<typeAliases>
<typeAlias type="com.mypack.entity.User" alias="User"/>
</typeAliases>
-->
<!-- 配置方式二 -->//批量重命名
<!-- 該包下的所有的類都可以直接寫類名 -->
<typeAliases>
<package name="com.mypack.entity"/>
</typeAliases>
<!-- 這個是批量重命名-->
注:配置寫在mybatis核心映射文檔里的<configuration></configuration>標簽里,就是第二步的映射文件
解決字段名與類的屬性名不一致問題
<!-- 配置屬性和字段映射關系 一對一關系-->//這個寫在dao層下的映射文件里
<resultMap type="Student" id="studentResultMap">
<id property="sid" column="s_id"/>//表里的主鍵,property類里的屬性, column表里的字段名
<result property="sname" column="s_name"/>
<association property="banji" javaType="BanJI">
<id property="cid" column="c_id"/>
<result property="cname" column="c_name"/>
</association>
</resultMap>
配置log4j
1.導jar包
log4j-1.2.17.jar
2.配置log4j.properties文件
log4j.rootLogger=DEBUG,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.kgc.dao=debug
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug
######################################################################################
# Console Appender \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n
######################################################################################
# DailyRolling File \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L)%m%n
log4j.logger.com.opensymphony.xwork2=error
遇到的坑
模糊查詢 差不到中文問題
解決mybatis 模糊查詢mysql 中文無法查詢到結果的問題
一種原因是字符編碼問題 可以修改mysql安裝目錄下面的my.ini文件
將default-character-set=utf-8 character-set-server=utf8
重啟Mysql
用管理員方式啟動 cmd 窗口,執行如下語句:
使用命令語句“net stop mysql” 停止 mysql 服務
使用命令語句“net start mysql” 啟動 mysql 服務