UserMapper映射文件:
<?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">
<!--namespace="com.bjsxt.mapper.UserMapper":命名空间,权限定路径 -->
<mapper namespace="com.bjsxt.mapper.UserMapper">
<!-- id:sql语句唯一标识符 resultType:返回结果,全限定路径。如果是集合需要写集合泛型 -->
<select id="selList" resultType="user">
select * from t_user
</select>
<select id="selOne" resultType="user" parameterType="int">
<!--传参两种方式:1.#{0} :index:从0开始,实际上{}是什么都行,用于占位
2.#{param1}
-->
select * from t_user where id=#{param2}
</select>
<select id="sel" resultType="user" parameterType="user">
<!-- 如果参数是对象:通过#{属性名} 获取-->
select * from t_user where username=#{username} and password=#{password}
</select>
<select id="selM" resultType="user" parameterType="map">
<!-- 如果参数是Map:通过#{key} 获取-->
select * from t_user where username=#{uname} and password=#{upwd}
</select>
</mapper>
测试:TestUserMapper
package com.bjsxt.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.print.attribute.HashAttributeSet;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.bjsxt.pojo.User;
/**
* 测试:在项目下导入JUnit,使用@test测试
* mybatis文件放在src下。
* 查看路径是否写的正确:选中+ctrl+鼠标左键
* @author YangBiao
*
*/
public class TestMyBatis {
@Test
public void testList() throws IOException{
//1.加载MyBatis核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//2.获取SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂打开session对象
SqlSession session = factory.openSession();
//4.通过session对象执行操作
List<User> list = session.selectList("com.bjsxt.mapper.UserMapper.selList");
//5.打印输出
System.out.println(list);
for (User user : list) {
System.out.println(user);
}
//6.关闭资源
session.close();
}
@Test
public void testSelectOne() throws IOException{
//1.加载MyBatis核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//2.获取SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂打开session对象
SqlSession session = factory.openSession();
//4.通过session对象执行操作
//User user = session.selectOne("com.bjsxt.mapper.UserMapper.selOne");
User user = session.selectOne("com.bjsxt.mapper.UserMapper.selOne", 2);
System.out.println(user);
//6.关闭资源
session.close();
}
@Test
public void testSel(){
SqlSession session=null;
try {
session = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml")).openSession();
User u = new User();
u.setUsername("lisi");
u.setPassword("123");
User user = session.selectOne("com.bjsxt.mapper.UserMapper.sel", u);
System.out.println(user);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(session!=null){
session.close();
}
}
}
@Test
public void testSelM(){
SqlSession session=null;
try {
session = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml")).openSession();
Map<String, String> map = new HashMap<>();
map.put("uname", "wangwu");
map.put("upwd", "123");
User user = session.selectOne("com.bjsxt.mapper.UserMapper.selM", map);
System.out.println(user);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(session!=null){
session.close();
}
}
}
}
实体类:user
package com.bjsxt.pojo;
import java.io.Serializable;
public class User implements Serializable{
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((password == null) ? 0 : password.hashCode());
result = prime * result + ((username == null) ? 0 : username.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
if (id != other.id)
return false;
if (password == null) {
if (other.password != null)
return false;
} else if (!password.equals(other.password))
return false;
if (username == null) {
if (other.username != null)
return false;
} else if (!username.equals(other.username))
return false;
return true;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
public User(int id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
public User() {
super();
}
}
mybatis核心配置文件:
<?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文件 -->
<properties resource="db.properties" />
<settings>
<!-- 设置mybatis使用log4j支持 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 设置别名 -->
<typeAliases >
<!--自己设置别名 -->
<!-- <typeAlias type="com.bjsxt.pojo.User" alias="u"/> -->
<!-- 直接写全限定路径,别名为类名且不区分大小写,最常用 -->
<!-- <typeAlias type="com.bjsxt.pojo.User"/> -->
<!-- 只写包名,别名为类名且这个包下的所有类的别名都是类名 -->
<package name="com.bjsxt.pojo"/>
</typeAliases>
<environments default="dev"> <!-- 指定哪一个环境 -->
<environment id="dev"> <!-- 配置开发环境 id:环境唯一标识符-->
<!-- 事务管理器 type="JDBC":以JDBC的方式管理事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据库连接池:配置连接池和参数 type="POOLED":采取连接池技术
property:配置参数
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 扫描mapper文件 -->
<mappers>
<mapper resource="com/bjsxt/mapper/UserMapper.xml"/>
</mappers>
</configuration>
外部文件db.propertise:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/bjsxt
jdbc.username=root
jdbc.password=root
日志文件log4j.properties:
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=ERROR, CONSOLE
#log4j.rootCategory=DEBUG, CONSOLE, LOGFILE
#设置方法级别日志
log4j.logger.com.bjsxt.mapper.UserMapper.selAll=DEBUG
#设置类级别日志
log4j.logger.com.bjsxt.mapper.UserMapper=DEBUG
#设置包级别日志
log4j.logger.com.bjsxt.mapper=DEBUG
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=F:/test.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=- %m %l%n