实体:
public class User {
private Long id;
private String userName;
private String pwd;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "{id:" + id + ",name:" + userName + ",pwd:" + pwd + "}";
}
}
数据表:
一、Mybatis的配置
①首先,Mybatis和hibernate一样,都有一个总的配置文件,用来记录数据库等的信息
<?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>
<typeAliases>
<!-- 起别名,即User相当于com.bussiness.domain.User -->
<typeAlias type="com.bussiness.domain.User" alias="User"/>
</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/mybatis" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 加载映射文件,相当于hibernate中的User.hbm.xml -->
<mappers>
<mapper resource="com/bussiness/domain/User.xml" />
</mappers>
</configuration>
</pre><pre class="html" name="code" snippet_file_name="blog_20140622_4_4518886" code_snippet_id="401703">②实体配置文件
<pre class="html" name="code"><?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.bussiness.domain.User">
<!-- #{id}只是占位符,写成其他的也可以#{aaa} -->
<select id="selectUserById" parameterType="long" resultMap="userMap">
select id,name,pwd from `user` where id = #{id}
</select>
</mapper>
二、Mybatis的增、删、查和改
1.增
<mapper namespace="com.bussiness.domain.User">
<!--
#{id},#{userName},#{pwd}
会对应调用实体的getId,getUserName,getPwd方法,
然后赋值
parameterType:传入参数类型,此处指定的是输入User类型
-->
<insert id="insertUser" parameterType="com.bussiness.domain.User">
insert into `user`(id,name,pwd) values (#{id},#{userName},#{pwd});
</insert>
</mapper>
/**
* 增加User
* @throws Exception
*/
@Test
public void testAddUser() throws Exception{
// 加载配置文件
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
// 根据配置文件创建出SessionFactory,相当于数据库连接池一样。
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
// 获得Session,即连接
SqlSession session = sf.openSession();
User user = new User();
user.setId(1l);
user.setUserName("author");
user.setPwd("123456");
// 第一个参数时指定执行的是那一条sql,namespace+id可以确定一条sql
// 第二个参数时输入的参数
session.insert("com.bussiness.domain.User.insertUser", user);
// Mybatis默认事务是开启的,所以执行增删改时候记得要commit
session.commit();
session.close();
}
2.删
<!--
这里的#{aaa}只是占位符而已,表示传入的参数
-->
<delete id="deleteUserById" parameterType="long">
delete from `user` where id = #{aaa}
</delete>
/**
* 删除User id为2的记录
* @throws Exception
*/
@Test
public void testDeleteUser () throws Exception{
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
session.insert("com.bussiness.domain.User.deleteUserById", 2l);
session.commit();
session.close();
}
3.查
由于数据字段与实体字段不一致,那么要怎么查呢,下面先用一种比较简单的方法,数据库和实体映射匹配下一篇再涉及
①查询一条记录
<!--
给name起别名,实体数据库和实体映射一致
resultType:返回值类型,这里返回User类型
-->
<select id="selectUserById" parameterType="long" resultType="com.bussiness.domain.User">
select id,name as userName,pwd from `user` where id = #{aaa}
</select>
/**
* 查询id为1的记录
* @throws Exception
*/
@Test
public void testSelectUserById() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
// 查询出id 为1的记录 selectOne只能返回一条记录
User user = session.selectOne("com.bussiness.domain.User.selectUserById", 1l);
System.out.println(user.getUserName());
session.close();
}
②查询所有记录
<!--
resultType:集合中元素的类型
-->
<select id="selectAllUser" resultType="com.bussiness.domain.User">
select id,name as userName,pwd from `user`
</select>
<strong>/**
* 查询所有User
* @throws Exception
*/
@Test
public void testSelectAll () throws Exception{
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
// 返回一个List集合
List<User> users = session.selectList("com.bussiness.domain.User.selectAllUser");
System.out.println(users.size());
session.close();
}</strong>
4.改
<span style="font-size:12px;"><update id="updateUserById" parameterType="com.bussiness.domain.User">
update `user` set name=#{userName} where id = #{id}
</update></span>
<span style="font-size:12px;">/**
* 修改
* @throws Exception
*/
@Test
public void testUpdateById() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sf.openSession();
User user = new User();
user.setId(2l);
user.setUserName("testUpdate");
session.update("com.bussiness.domain.User.updateUserById", user);
session.commit();
session.close();
}</span>