Mybatis-Spring操作步骤

Mybatis注解开发步骤

1.在pom.xml中配置相应文件
1)mybatis
2)mysql-connector-java
3)log4j
4)junit

2.准备User实体类
对应数据库中的信息进行一个封装
setter:给该方法赋值
getter:可以调用该方法
tostring:返回以一个字符串表示的Number对象值,如果方法使用了原生数据类型作为参数,返回原生数据类型的String对象值

3.创建dao接口
实现各种功能如增删改查等:
List findAll(); void saveUser(User user);

4.创建配置文件
1)添加约束
2)配置环境
3)引入外部配置文件(jdbcConfig.properties、log4j.properties)
4)配置带有注解的dao所在位置

<?xml version="1.0" encoding="UTF-8"?>
<!--配置别名-->
<typeAliases>
    <package name="com.itheima.domain"></package>
</typeAliases>
<!-- 配置环境-->
<environments default="mysql">
    <environment id="mysql">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driver}"></property>
            <property name="url" value="${jdbc.url}"></property>
            <property name="username" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </dataSource>
    </environment>
</environments>
<!-- 指定带有注解的dao接口所在位置 -->
<mappers>
   <package name="com.itheima.dao"></package>
</mappers>

5.在dao中加入注解
mybatis中crud有四个注解:@select @insert @update @delete

例:@Select(“select * from account”)
List findAll();

6.生产测试类
//1.获取字节输入流
InputStream in = Resources.getResourceAsStream(“SqlMapConfig.xml”);
//2.根据字节输入流构建SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.根据SqlSessionFactory生产一个SqlSession
SqlSession session = factory.openSession();
//4.使用SqlSession获取Dao的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.执行Dao方法
List users = userDao.findAll();
for (User user : users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
或者:
private InputStream in;
private SqlSessionFactory factory;
private SqlSession session;
private IAccountDao accountDao;

@Before
public void init() throws Exception{
    in = Resources.getResourceAsStream("SqlMapConfig.xml");
    factory = new SqlSessionFactoryBuilder().build(in);
    session = factory.openSession();
    accountDao = session.getMapper(IAccountDao.class);

}

@After
public void destroy() throws Exception{
    session.commit();
    session.close();
    in.close();
}

@Test
public void findAll(){
    List<Account> accounts = accountDao.findAll();
    for (Account account : accounts){
        System.out.println("----每个用户信息----");
        System.out.println(account);
        System.out.println(account.getUser());
    }
}

一对多的查询

需要在两个不同的dao中添加results注解

column为数据库字段名,porperty为实体类属性名,jdbcType为数据库字段数据类型,id为是否为主键。
@One的用法。当我们需要通过查询到的一个字段值作为参数,去执行另外一个方法来查询关联的内容,而且两者是一对一关系时,可以使用@One注解来便捷的实现。
@One的用法。当我们需要通过查询到的一个字段值作为参数,去执行另外一个方法来查询关联的内容,而且两者是一对一关系时,可以使用@One注解来便捷的实现。

@Results(id=“accountMap”,value = {
@Result(id=true,column = “id”,property = “id”),
@Result(column = “uid”,property = “uid”),
@Result(column = “money”,property = “money”),
@Result(property = “user”,column = “uid”,
one=@One(select=“com.itheima.dao.IUserDao.findById”,
fetchType= FetchType.EAGER))
})
另一个dao
@Results(id=“userMap”,value={
@Result(id=true,column = “id”,property = “userId”),
@Result(column = “username”,property = “userName”),
@Result(column = “address”,property = “userAddress”),
@Result(column = “sex”,property = “userSex”),
@Result(column = “birthday”,property = “userBirthday”),
@Result(property = “accounts”,column = “id”,
many = @Many(select = “com.itheima.dao.IAccountDao.findAccountByUid”,
fetchType = FetchType.LAZY))
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值