mybatis的增删改查
1.定义接口
public interface AccountDao{
public void insertAccount(Account a);
public void deleteAccount(Interger cardId);
public void updateAccount(Account a);
public Account queryAccountByCardId(Interger cardId);
}
2.写实体类
public class Acount{
private String name;
private String password;
private String cardId;
}
3.建account表(表里的字段和实体类的属性一一对应)
4.书写映射文件
<!-- namespace 的值为全类名(包名.类名)-->
<mapper namespace="AccountDao">
<insert id="insertAccount" parameterType="包名.Account(参数类型)">
<selectKey resultType="java.lang.Interger" KeyProperty="cardId" order="BEFORE"(在添加之前查询)>
<!-- 因为我们的cardid可能是表里的一个主键,具有唯一值,并不需要我们手动填写-->
select accoun_seq.nextval from dual
</selectKey>
insert into account (cardId,name,password)values(#{cardId},#{name},#{password})</insert><delete id="deleteAccount" parameterType="java.lang.Interger">delete from account where cardid=#{cardId}</delete><select id="queryAccountByCardId" parameterType="java.lang.Interger" resultType="包名.Account(返回值类型)">
select cardId,name,password from account where cardid=#{cardId}
</select>
<update id="deleteAccount" parameterType="java.lang.Interger">
update account set name=#{name},password=#{password} where cardid(表里的字段名)=#{cardId}
</update>
</mapper>
mybatis会自动将结果集里的数据封装成制=指定的返回值类型,封装时,将结果里的字段值设置到对应实体类的相应属性里,要求结果字段名和对象的属性名保持一一对应,当数据库里的名字和实体类的属性名不一致时,查询的结果应该起一个别名(as 名字)和实体类的属性一致5.书写测试类
public class Test {
public static void main(String [] args){
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(Resources.getResourceAsReader());
SqlSession session=factory.openSession();AccountDao dao=session.getMapper(AccountDao.class);
Account a=new Account("null","adasd","dasdasdas");
dao.insertAccount(a);//增加
session.commit();
Account a=dao.queryAccountByCardId(1000)//查询
a.setPassword("123456");//更新
dao.updateAccount(a);session.commit();//提交操作
session.close()
}
}