MyBatis编码的三种思路
1. 实体类+映射文件+基础配置文件+测试类
实体类
public class Users {
private int id;
private String name;
private int age;//属性的类型及属性名与数据表中的字段相对应
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
映射文件
命名规则:表名+Mapper
<mapper namespace="bean.UsersMapper"><!-- 命名空间的名字为映射文件全路径 -->
<select id="GetUserByID" parameterType="int" resultType="Users">
select * from users where id = #{id}
</select>
</mapper>
基础配置文件
<configuration>
<typeAliases>
<typeAlias alias="Users" type="bean.Users"/>
</typeAliases>
<environments default="development">
<environment id="development"><!-- 与environments中default的值保持一致 -->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/frank"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments><!-- 基础环境配置 -->
<mappers>
<mapper resource="bean/usersMapper.xml"></mapper>
</mappers><!-- 注册映射文件 -->
</configuration>
测试类
public class Test {
public static void main(String[] args) throws IOException {
//使用Resources类调用getResourceAsReader()加载基础配置文件
//获得了一个Reader对象
Reader is = Resources.getResourceAsReader("config.xml");
//通过new SqlSessionFactoryBuilder()调用build()
//获得了一个SqlSessionFactory对象
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
//创建能执行映射文件中sql语句的sqlSession
//使用SqlSessionFactory的对象sf调用openSession()
//获得一个SqlSession对象
SqlSession session = sf.openSession();
//使用SqlSession的对象session查询方法
//第一个值是映射文件中sql语句的标识字符串,第二个值则是查询指定的ID
Users u = session.selectOne("bean.UsersMapper.GetUserByID",1);
System.out.println(u.getId());
System.out.println(u.getName());
System.out.println(u.getAge());
}
}
2. 实体类+接口+注解+基础配置文件+测试类
实体类同上
接口结合注解
public interface IUsers {
@Select("select * from users where id=#{id}")
public Users select(int id);
}
基础配置文件中无须注册映射文件
测试类
public class Test {
public static void main(String[] args) throws IOException {
Reader is = Resources.getResourceAsReader("config.xml");
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
//通过sqlsessionfactory的对象调用getconfiguration()
//调用addmapper()使用反射机制,将该接口添加到mapper
sf.getConfiguration().addMapper(IUsers.class);
//创建能执行映射文件中sql语句的sqlSession
//使用SqlSessionFactory的对象sf调用openSession()
//获得一个SqlSession对象
SqlSession session = sf.openSession();
//通过SqlSession的对象session调用getMapper()得到接口的实例
IUsers iusers = session.getMapper(IUsers.class);
//使用接口对象调用查询方法
Users users = iusers.select(1);
System.out.println(users.getId());
System.out.println(users.getName());
System.out.println(users.getAge());
}
}
3. 实体类+接口+映射文件+基础配置文件+测试类
实体类同上
接口
public interface IUsers {
//新增数据的方法
public int insertUser(Users users);
//删除数据的方法
public int deleteUser(int i);
//修改数据的方法
public int updateUser(Users users);
//查询数据的方法
public Users selectUser(int i);
}
映射文件
<mapper namespace="dao.IUsers"><!-- 这里的值为接口全路径 -->
<!-- sql语句标签的id值必须与接口中对应的方法的方法名保持一致 -->
<insert id="insertUser" parameterType="Users">
insert into users(id,name,age) values(#{id},#{name},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
<update id="updateUser" parameterType="Users">
update users set name=#{name},age=#{age} where id=#{id}
</update>
<select id="selectUser" parameterType="int" resultType="Users">
select * from users where id=#{id}
</select>
</mapper>
基础配置文件与第一种方式相同
测试类
public class TestApp {
public static void main(String[] args) throws IOException {
//加载基础配置文件
Reader is = Resources.getResourceAsReader("config.xml");
//创建SqlSessionFactory对象
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
//打开session会话
SqlSession ss = ssf.openSession();
//获取接口实例对象
IUsers iu = ss.getMapper(IUsers.class);
//创建实体类对象
Users u = new Users();
//设值
u.setId(1);
u.setName("李四");
u.setAge(18);
//使用接口对象调用修改方法
int i = iu.updateUser(u);
//提交操作
ss.commit();
}