Dao实现类编写
Mybatis是支持自己编写实现类的不过用的比较少。
实现类:
public class IUserDaoImpl implements IUserDao {
// 工厂对象
private SqlSessionFactory factory;
public IUserDaoImpl(SqlSessionFactory factory){
this.factory=factory;
}
public List<User> findAll() {
SqlSession session = factory.openSession();
// 这里的key和单独xml配置文件中的namespace相同 后面跟方法名称(mapper中的id)
List<User> users = session.selectList("com.mybatisDemo.dao.IUserDao.findAll");
session.close();
return users;
}
public void saveUser(User user) {
SqlSession session = factory.openSession();
session.insert("com.mybatisDemo.dao.IUserDao.saveUser",user);
// 提交事务
session.commit();
session.close();
}
}
测试类:
public class IUserDaoImplTest {
private InputStream inputStream;
private IUserDao iUserDao;
@Before
public void init() throws IOException {
// 读取配置文件
inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建SqlSessionFactory工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
// 使用工厂对象创建Dao对象
iUserDao = new IUserDaoImpl(factory);
}
@After
public void destroy() throws IOException {
inputStream.close();
}
@Test
public void findAll() {
List<User> all = iUserDao.findAll();
for (User user : all) {
System.out.println(user);
}
}
xml标签
- properties:在主配置文件中设置连接数据库的url,username等时用起来比较麻烦,可以编写一个properties配置文件使用xml中的properties标签去读取。
<!--properties
resource来连接外部配置文件,路径是按照类路径的方法来写
-->
<properties resource="jdbc.properties">
</properties>
<!--配置环境-->
<environments default="mysql">
<!--配置MySQL环境-->
<environment id="mysql">
<!--配置事务类型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源-->
<dataSource type="POOLED">
<!--连接数据库的四个基本信息 value的值前缀跟配置文件一样-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
- typeAlias和package
<typeAliases>
<!--type指定实体类全限定类名,alias指定别名,指定了别名就不再区分大小写-->
<typeAlias type="com.mybatisDemo.domain.User" alias="user"></typeAlias>
<!--用于指定要配置别名的包,当指定之后,该包下的实体类都会将类名注册为别名,区分大小写-->
<package name="com.mybatisDemo.domain"></package>
</typeAliases>
<mappers>
<!--xml配置-->
<!--<mapper resource="com/mybatisDemo/dao/IUserDao.xml"/>-->
<!--注解配置-->
<!--<mapper class="com.mybatisDemo.dao.IUserDao"/>-->
<!--用于指定dao接口所在的包,指定之后就不需要写mapper,resource或者class-->
<package name="com.mybatisDemo.dao"></package>
</mappers>