0. MyBatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://www.mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--可进行外部加载数据库的信息 -->
<!-- <properties resource=""></properties>-->
<!--别名 - 可简写类全限定名可直接写成 类名即可 -->
<typeAliases>
<package name="top.linruchang.domain"/>
</typeAliases>
<!-- 数据源的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/graduation_design?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- dao层sql映射文件位置 resource默认在classpath路径下-->
<!-- 不可使用 mapper/*Mapper.xml 进行模糊文件名 ,否则报错-->
<mappers>
<mapper resource="mapper/userMapper.xml"/>
</mappers>
</configuration>
1. 简单实例 - 配合Log4j - 包含配置文件
依赖pom.xml
<dependencies>
<!-- mybatis持久层框架 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- 数据库连接 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 日志打印 -->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 单元测试 -->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
log4j.proerties - 日志配置
# 全局日志级别、以及日志输出的位置别名(可多个位置)
log4j.rootLogger=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n
# 需要日志打印的类 - 必须配置 - 定义哪个包下的类运行时,开始打印日志
# log4j.logger.包全限定名
log4j.logger.top.linruchang.dao=DEBUG
#ibatis logger config - 定义需要打印什么东西
log4j.logger.com.ibatis=WARN
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=WARN
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=WARN
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=WARN
log4j.logger.java.sql.Connection=WARN
log4j.logger.java.sql.Statement=WARN
log4j.logger.java.sql.PreparedStatement=WARN
mybatisConfig.xml - 全局配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://www.mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--可进行外部加载数据库的信息 -->
<!-- <properties resource=""></properties>-->
<!--别名 - 可简写类全限定名可直接写成 类名即可 -->
<typeAliases>
<package name="top.linruchang.domain"/>
</typeAliases>
<!-- 数据源的配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/graduation_design?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- dao层sql映射文件位置 resource默认在classpath路径下-->
<!-- 不可使用 mapper/*Mapper.xml 进行模糊文件名 ,否则报错-->
<mappers>
<mapper resource="mapper/userMapper.xml"/>
</mappers>
</configuration>
userMapper.xml - dao层sql语句映射
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.linruchang.dao.userDao">
<select id="findById" resultType="user">
select * from ums_user where id = #{id}
</select>
</mapper>
UserDao.java
public interface userDao {
public User findById(Integer id);
}
数据库User表
User.java
public class User {
Integer id;
Integer role_id;
String loginName;
String password;
String nickname;
String headImg;
//自己填充get\set\tostring方法
}
AppTest.java - 测试类
public class AppTest {
InputStream is;
SqlSessionFactory factory;
SqlSession sqlSession;
@Before
public void prepare() throws IOException {
// 加载myvatis全局配置文件
is = Resources.getResourceAsStream("mybatisConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 根据配置文件进行初始化 数据库连接工厂
factory = builder.build(is);
}
@Test
public void mybatis() throws IOException {
// 获取数据库连接对象
sqlSession = factory.openSession();
// 根据Mmapper文件进行查询数据 = namespace+id
User user = sqlSession.selectOne("top.linruchang.dao.UserDao.findById" ,1);
// 利用反射进行封装dao层 - 该两条语句等于上面一条语句
//UserDao userDaoImpl = sqlSession.getMapper(UserDao.class);
//userDaoImpl.findById(1);
System.out.println(user);
}
@After
public void end() throws IOException {
//关闭资源
sqlSession.close();
is.close();
}
}
2. 基于注解使用
切记:注解跟 userMapper.xml不能同时配置在mybatisConfig.xml里面,会造成冲突。所以说要么使用注解进行映射SQL语句,要么使用xml进行映射SQL语句。只能二选一。
跟上面的步骤差不多
mybatisConfig.xml修改
<!-- class类名映射dao -->
<mappers>
<mapper class="top.linruchang.dao.UserDao"/>
</mappers>
UserDao.java
public interface UserDao {
@Select("select * from ums_user where id = #{id}")
public User findById(Integer id);
}