学习日记:mybatis常用注解

如果正在学mybatis,首先配置的应该是sqlsession工厂,通过spring AOP的动态代理,把前置代码写完


private UserMapper userMapper;

@Before
public void before() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
userMapper = sqlSession.getMapper(UserMapper.class);
}

然后进行注解扫描

<mappers>
<!-- 扫描使用注解的类所在的包 -->
<package name="com.bk.mapper"></package>
</mappers>

增删改查

@Insert :实现新增
@Update :实现更新
@Delete :实现删除
@Select :实现查询

需要注意的是,如果执行新增操作的时候,打算让数据库的主键直接生成id,而不是选择注入,可以写@Options,下面是代码

 @Options(useGeneratedKeys = true,keyProperty = "id")
    @Insert("insert into account(name,money) values (#{name},#{money})")
    long insert(Account account);

其中的useGeneratedKeys参数是主键是否自增,有true和false,keyProperty参数的引号中的id是代表生成的主键存入account.id中,该insert函数的返回值就是id的值

一般情况下将数据包装成实体类来进行数据插入,但也可以不使用实体类而是用对象之间进行插入,使用@Param函数

 @Insert("insert into account(name,money) values (#{name},#{money})")
    long insert1(@Param("name") String name,@Param("money") Double money);

多表操作

@Result :实现结果集封装

     属性:column :数据库的列名
                property :需要装配的属性
@Results :可以与 @Result 一起使用,封装多个结果集
@One :实现一对一结果集封装 代替了 <assocation>
@Many :实现一对多结果集封装 代替了 <collection> 标签

使用方法@Results ( {@Result (), @Result () } )或@Results ( @Result ())
one :需要使用的 @One 注解 @Result(column=" ",property="",one=@One(select=""))
many :需要使用的 @Many 注解 @Result(property="",column="",many= @Many (select=""))

一对一查询

Order类中有id, ordertime,total和 private User user;
User类中有 id、username、password、 birthday;

public interface OrderMapper {
@Select("select * from orders")
@Results({
@Result(id=true,property = "id",column = "id"),
@Result(property = "ordertime",column = "ordertime"),
@Result(property = "total",column = "total"),
@Result(property = "user",column = "uid",
javaType = User.class,
one = @One(select =
"com.bk.mapper.UserMapper.findById"))
})
List<Order> findAll();
}
public interface UserMapper {
@Select("select * from user where id=#{id}")
User findById(int id);
}

或者可以用另一种方式

 @Select("select  *,o.id oid from prder o,user u where o.uid=u.id")
    @Results({
            @Result(column = "oid",property = "id"),
            @Result(column = "ordertime",property = "orderTime"),
            @Result(column = "total",property = "total"),
            @Result(column = "uid",property = "user.id"),
            @Result(column = "username",property = "user.username"),
            @Result(column = "password",property = "user.password")
    })
    public List<Order> find();

一对多查询:

往User 里新增一个参数private List<Order> orderList;

public interface UserMapper {
@Select("select * from user")
@Results({
@Result(id = true,property = "id",column = "id"),
@Result(property = "username",column = "username"),
@Result(property = "password",column = "password"),
@Result(property = "birthday",column = "birthday"),
@Result(property = "orderList",column = "id",
javaType = List.class,
many = @Many(select =
"com.bk.mapper.OrderMapper.findByUid"))
})
List<User> findAllUserAndOrder();
}

public interface OrderMapper {
@Select("select * from orders
where uid=#{uid}")
List<Order> findByUid(int uid);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值