第一种方法:一般不用
完整的映射文件
<?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="user">
<!--根据id查询-->
<!--
[id]:statement的id,要求在命名空间内唯一
[parameterType]:入参的java类型
[resultType]:查询出的单条结果集对应的java类型
[#{}]: 表示一个占位符?
[#{id}]:表示该占位符待接收参数的名称为id。
注意:如果参数为简单类型时,#{}里面的参数名称可以是任意定义
-->
<select id="findUserById" parameterType="int" resultType="com.szl.model.User">
SELECT * from user where id=#{id}
</select>
<!--插入数据-->
<!--这里的占位写的是模型的属性-->
<insert id="insertUser" parameterType="com.szl.model.User">
insert into user (username,sex,birthday,address)
values (#{username},#{sex},#{birthday},#{address});
</insert>
<!--删除数据-->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{ids}
</delete>
<!--修改数据-->
<update id="updateUser" parameterType="com.szl.model.User">
update user set address=#{address},sex=#{sex}
where id=#{id};
</update>
<!--插入返回id-->
<insert id="insertUser2" parameterType="com.szl.model.User">
<selectKey keyProperty="id" resultType="int" order="AFTER">
select last_insert_id()
</selectKey>
insert into user (username,sex,birthday,address)
values (#{username},#{sex},#{birthday},#{address});
</insert>
</mapper>
1创建dao接口
package com.szl.dao;
import com.szl.model.User;
public interface UserDao {
/*
保存
*/
public void save(User user);
/*
* 查找
* */
public User findUserById(int id);
}
2实现dao类
package com.szl.dao;
import com.szl.model.User;
public interface UserDao {
/*
保存
*/
public void save(User user);
/*
* 查找
* */
public User findUserById(int id);
}
3测试
package com.szl.test;
import com.szl.dao.UserDao;
import com.szl.dao.UserDaoImpi;
import com.szl.model.User;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class Demo3 {
SqlSessionFactory factory;
@Before
public void before() throws IOException {
System.out.println("before......获取session");
// * a) 读取配置文件;
InputStream is= Resources.getResourceAsStream("SqlMapConfig.xml");
// * b) 通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂。
factory= new SqlSessionFactoryBuilder().build(is);
}
/*
* 查询多条记录
* */
@Test
public void test1() throws IOException {
// 调用dao
// 创建dao
UserDao userDao=new UserDaoImpi(factory);
//查询
User user=userDao.findUserById(1);
System.out.println(user);
//插入
User user1=new User("ccc","w",new Date(),"ddedd");
userDao.save(user1);
}
}
注:这两个方法的效果同前边查询添加效果一样
第二种:用mapper代理方式实现,就不用谢dao这个包了,写Mapper包
mapper代理的方式,程序员只需要编写mapper接口(相当于dao接口)即可,mybatis会自动的为mapper接口生成动态的代理实现类。(需要遵循一些规范)
规范:
1、mapper接口的全限定名要和mapper映射文件的namespace的值相同。
2、mapper接口的方法名称要和mapper映射文件中的statement的id相同。
3、mapper接口的方法参数只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致。
4、mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致。
第一步
创建usermapper接口:
public interface UserMapper {
/*
保存
*/
/**
*
* @param user
* @return 受影响的行数
*/
public int save(User user);
/*
* 查找
* */
public User findUserById(int id);
}
创建UserMapper.xml映射文件
<?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.szl.mapper.UserMapper">
<insert id="save" parameterType="com.szl.model.User">
insert into user (username,sex,birthday,address)
values (#{username},#{sex},#{birthday},#{address})
</insert>
<select id="findUserById" parameterType="int" resultType="com.szl.model.User">
SELECT * from user where id=#{id}
</select>
</mapper>
第二步
配置mybatis主配置文件SqlMapConfig.xml:
<mappers>
<mapper resource="com/szl/mapper/UserMapper.xml"></mapper>
</mappers>
第三步
创建测试类:
public class Demo4 {
SqlSession session;
@Before
public void before() throws IOException {
System.out.println("before......获取session");
// * a) 读取配置文件;
InputStream is= Resources.getResourceAsStream("SqlMapConfig.xml");
// * b) 通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂。
SqlSessionFactory factory= new SqlSessionFactoryBuilder().build(is);
session=factory.openSession();
}
@After
public void after(){
session.close();
}
/*
* 查询多条记录
* */
@Test
public void test1() throws IOException {
//查找
//返回的是代理
UserMapper userMapper= session.getMapper(UserMapper.class);
System.out.println(userMapper.findUserById(1));
//保存
User user=new User("aaaaaab","2",new Date(),"xxx") ;
userMapper.save(user);
session.commit();;
}
}