不多说,直接上代码:
xml实现Crud
接口:
package com.huihui.dao;
import com.huihui.entity.User;
import java.util.List;
public interface IUserDao {
/*增*/
void save(User user);
/*删*/
void delete(Integer id);
/*改*/
void update(User user);
/*查*/
List<User> findAll();
/*模糊查询*/
List<User> findAllByUsername(String name);
}
实体类:
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;// 这里省略get、set,构造方法。。。
IUserDao.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 名称空间,表示xml是哪一个接口的隐射-->
<!--
获取保存数据后数据库主键值
<selectKey>标签完成
keyProperty: 把查询后的主键值赋给对象(parameterType)的哪个属性值
keyColumn: 表的主键字段名称
resultType: 返回主键值的类型
order: 查询主键值的语句在insert之前还是之后
-->
<mapper namespace="com.huihui.dao.IUserDao">
<insert id="save" parameterType="com.huihui.entity.User">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID();
</selectKey>
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert>
<!--
1. 添加: insert
id: 方法名称
parameterType: 输入参数类型 (可以省略的)
如果Java对象,写对象的全名
如果是集合,写集合里面的类型的全名即可
#{username}: 有两层意思
1) 和?一样占位
2) 取parameterType对象的属性值 作为参数值
-->
<insert id="delete" parameterType="Integer">
delete from user where Id = #{id}
</insert>
<update id="update" parameterType="com.huihui.entity.User">
UPDATE user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where Id = #{id}
</update>
<select id="findAllByUsername" resultType="com.huihui.entity.User">
SELECT * from user where username LIKE #{username}
</select>
<resultMap id="userResultMap" type="com.huihui.entity.User">
<id property="id" column="id_"/>
<id property="username" column="username_"/>
<id property="birthday" column="birthday_"/>
<id property="sex" column="sex_"/>
<id property="address" column="address_"/>
</resultMap>
<select id="findAll" resultMap="userResultMap">
SELECT id id_, username username_,birthday birthday_,sex sex_,address address_ FROM USER;
</select>
</mapper>
SqlMapConfig.xml:
<?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>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="pooled">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/huihui/dao/IUserDao.xml"/>
</mappers>
</configuration>
<!--加载接口的映射文件-->
测试类:
package com.huihui;
import com.huihui.dao.IUserDao;
import com.huihui.entity.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.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Test1 {
IUserDao userDao = null;
SqlSession sqlSession = null;
@Before
public void test1() throws IOException {
//1,获取文件流
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建sqlsession工厂构造器,是为了创建sqlsession的工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//根据工厂构造器,创建sqlsession对象
SqlSessionFactory factory = builder.build(in);
//根据sqlsession工厂,创建sqlSession对象
sqlSession = factory.openSession();
//1对dao的接口生成代理对象
userDao = sqlSession.getMapper(IUserDao.class);
//2查看接口代理
System.out.println("查看接口代理:" + userDao.getClass());
}
@Test
public void testSave(){
User user = new User();
user.setUsername("老黄老黄");
user.setSex("男");
System.out.println("保存前"+user);
userDao.save(user);
System.out.println("保存后"+user);
sqlSession.commit();
}
@Test
public void testDelete() {
userDao.delete(62);
sqlSession.commit();
}
/*改*/
@Test
public void testUpdate(){
User user = new User();
// 一定要设置id,不然数据会全部被替换
user.setId(60);
user.setSex("男");
user.setUsername("小妮妮");
user.setAddress("隔壁");
userDao.update(user);
sqlSession.commit();
}
@Test
public void testFindAllByUsername(){
//3执行代理方法
List<User> list = userDao.findAllByUsername("%苍%");
// sqlSession.commit();
//4遍历数据
for (User u:list){
System.out.println(u);
}
}
@Test
public void testFindAll(){
//3执行代理方法
List<User> list = userDao.findAll();
sqlSession.commit();
//4遍历数据
for (User u:list){
System.out.println(u);
}
}
}
Mybatis框架CRUD使用注解实现
IUserDao
package com.huihui.dao;
import com.huihui.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface IUserDao {
/*增*/
@Insert("insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})")
void save(User user);
/*删*/
@Delete("delete from user where Id = #{id}")
void delete(Integer id);
/*改*/
@Update("UPDATE user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where Id = #{id}")
void update(User user);
/*查*/
//查询所有
@Results(
{
@Result(property = "id",column = "id_",id = true),
@Result(property = "username",column = "username_"),
@Result(property = "birthday" ,column = "birthday_"),
@Result(property = "sex",column = "sex_"),
@Result(property = "address",column = "address_"),
}
)
@Select("SELECT id id_,username username_,birthday birthday_,sex sex_,address address_ FROM USER;")
List<User> findAll();
}
然后再修改SqlMapConfig.xml关联Dao接口!再
小技巧:
resultType: 表的字段名称和类的属性名称一致的情况下,完成对象的封装!!
resultMap:表的字段名称和类的属性名称在不一致的情况下,完成对象的封装!!或关联关系映射处理
…
此文仅供参考