三、Mybatis架构图(图来自www.siki.com的学习资料)
四、mybatis官网 http://www.mybatis.org/mybatis-3/
1、下载Mybatis,创建项目、导包
2、准备数据库、测试用例
import java.util.Date;
/**
* CREATE TABLE `user` (
`u_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
`u_username` varchar(64) NOT NULL COMMENT '用户名',
`u_password` varchar(64) DEFAULT NULL COMMENT '用户密码',
`u_sex` varchar(16) DEFAULT NULL COMMENT '用户性别',
`u_createTime` datetime DEFAULT NULL COMMENT '用户创建时间',
`u_cid` int(11) DEFAULT NULL COMMENT '用户国家id',)
*
*/
public class User {
private Integer u_id;
private String u_username;
private String u_password;
private String u_sex;
private Date u_createTime;
private Integer u_cid;
}
3、主配置文件、映射文件
主配置文件,添加约束已经相关配置信息:
映射文件,添加约束:
4、编写一个小用例,”通过ID查询用户“。
(1)新建HelloMyBatis
步骤: //读取配置文件,使用inputStream
//需要SqlSessionFactoryBuilder
//生产SqlSessionFactory
//创建SqlSession
//操作数据库
public class HelloMyBatis {
//通过ID查询用户
@Test
public void test1() throws IOException {
//读取配置文件,使用inputStream
String resource = "SqlMapperConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//需要SqlSessionFactoryBuilder
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//生产SqlSessionFactory
SqlSessionFactory ssf = ssfb.build(in);
//创建SqlSession
SqlSession sqlSession = ssf.openSession();
//操作数据库
//参数:一是操作的SQL语句,二是SQL语句的参数。
User user = sqlSession.selectOne("UserMapper.selectUserById",1);
System.out.println(user);
}
}
(2)特别说明:这里利用Junit4测试,做法就是在方法前加上@Test注解。
(3)UserMapper.xml加上
注意:可以看到查询测例中的代码,用到了selectOne("这里是UserMapper.xml里的namespace+
(4)最后附上,log4j.properties的代码,用于查看SQL查询中的DEBUG。
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
(5)结果:
附:中间出现了一个SQLException:no suitable driver for ......
结果是因为我的jbdc:mysql:那个语句写少了一个冒号。
5、编写另一个小用例,通过用户名模糊查找用户,利用LIST输出用户。
//通过用户名模糊查找用户
@Test
public void test2() throws IOException {
//读取配置文件,使用inputStream
String resource = "SqlMapperConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//需要SqlSessionFactoryBuilder
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
//生产SqlSessionFactory
SqlSessionFactory ssf = ssfb.build(in);
//创建SqlSession
SqlSession sqlSession = ssf.openSession();
//操作数据库
//参数:一是操作的SQL语句,二是SQL语句的参数。
List list = sqlSession.selectList("UserMapper.selectUserByName","王");
for (User user2 : list) {
System.out.println(user2);
}
}
结果:
两个例子,最主要的不同就是#{}占位符与 ${}字符串拼接的不同,两者可互相替换, #{}传递过来的值是‘字符串’
${}传递过来的是字符串中的数据;
接下来,同一个语句且可运行,看看两者的不同:
select * from user where u_username like '%${value}%'
select * from user where u_username like "%"#{name}"%"
其中,字符串拼接中的value这个属性是固定的,不能修改,否则会报错。
6、小例子,添加用户
User user = new User();
user.setU_username("Dunka");
user.setU_password("123456");
user.setU_sex("女");
user.setU_createTime(new Date());
user.setU_cid(1);
sqlSession.insert("insertUser", user);
//因为前面配置文件,是用JDBC开启事务,事务需要提交事务
//这里需要添加事务提交语句
sqlSession.commit();
insert into user values(null,#{u_username},#{u_password},#{u_sex},#{u_createTime},#{u_cid})
7、小栗子,通过id删除用户
//操作数据库
sqlSession.delete("deleteUserById", 13);
sqlSession.delete("deleteUserById", 14);
sqlSession.delete("deleteUserById", 15);
//因为前面配置文件,是用JDBC开启事务,事务需要提交事务
//这里需要添加事务提交语句
sqlSession.commit();
delete from user where u_id=#{u_id}