查询
- 创建项目并导入坐标
- 创建实体类User
- 创建SqlMapConfig.xml主配置文件
<configuration>
<!--配置环境-->
<environments default="mysql">
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源(连接池)-->
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<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>
<!--指定映射配置文件的位置-->
<mappers>
<mapper resource="com/wyj/dao/IUserDao.xml"></mapper>
</mappers>
</configuration>
- 创建接口及映射文件
<mapper namespace="com.wyj.dao.IUserDao">
<!--查询所有-->
<select id="findAll" resultType="com.wyj.domain.User">
select * from user
</select>
</mapper>
resultType:用于指定结果的类型
- 编写测试类查询所有
保存
- 在接口中新增一个保存用户的方法,对应的映射文件编写
<!--保存用户-->
<insert id="saveUser" parameterType="com.wyj.domain.User">
insert into user(username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
</insert>
parameterType:代表参数的类型,传入的是一个类的对象,类型就写类的全名称
sql语句中使用#{}字符:代表占位符,相当于原来jdbc中的?,具体的内容是由#{}中的内容决定。
#{}中的内容:由于保存方法的参数使一个User对象,因此此处要写User对象中的属性名称。使用ognl表达式。
ognl表达式:它是 apache 提供的一种表达式语言,全称是: Object Graphic Navigation Language 对象图导航语言,它是按照一定的语法格式来获取数据的。 语法格式就是使用 #{对象.对象}的方式。
#{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用getUsername()方法把值取出来。但是我们在parameterType 属性上指定了实体类名称,所以可以省略 user.而直接写 username。
- 测试类中的方法,提取公共部分
public class MybatisTest {
private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao;
@Before //用于在测试方法执行之前执行
public void init() throws Exception {
//1.读取配置文件,生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.获取SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.获取SqlSession对象
sqlSession = factory.openSession();
//4.获取dao的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
}
@After //用于在测试方法之后执行
public void destroy() throws Exception {
//提交事务
sqlSession.commit();
//6.释放资源
sqlSession.close();
in.close();
}
/**
* 测试保存操作
*/
@Test
public void testSave(){
User user = new User();
user.setUsername("mybatis saveuser");
user.setAddress("北京市顺义区");
user.setSex("男");
user.setBirthday(new Date());
userDao.saveUser(user);
}
- 新增用户id的返回值
新增用户后,同时还要返回当前新增用户的 id 值,因为 id 是由数据库的自动增长来实现的,所以就相当于我们要在新增后将自动增长 auto_increment 的值返回。
<!--保存用户-->
<insert id="saveUser" parameterType="com.wyj.domain.User">
<!--配置插入操作后获取插入数据的id -->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday)values (#{username},#{address},#{sex},#{birthday});
</insert>
修改
<!--更新用户-->
<update id="updateUser" parameterType="com.wyj.domain.User">
update user set username = #{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id};
</update>
删除
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{userID};
</delete>
注意:parameterType的参数是一个简单类型(基本类型8种+String)的时候,#{}中的值可以任意写,如果是一个对象(例如User),则必须使用属性名称