应用mybatis的步骤:
mybatis的入门
依赖配置。操作:
1,新建实体类,类中的属性和数据库中的属性所对应
2,新建dao接口,里面写上你需要的方法(比如说返回全部的list集合)。
3,在resource里面新建XML文件,名叫SqlMapConfig.xml(mybatis的主配置文件)
4,配置映射配置文件,例如IUserDao.xml
环境搭建注意事项:
第一个,创建IUserDao。XML和IUserDao.java名称是为了保持一致。在mybatis中它把持久层的操作接口和名称和映射文件也叫作Mapper,所以,IUserDao和IUserMapper是一样的
在二个,在idea中创建目录是和包不一样。包是:com.demo.dao是三级目录,而resource目录是一级的。
第三个,mybatis的映射配置文件必须和dao接口包结构相同。(同时,映射配置文件名称和接口名称必须相同)
第四个,映射配置文件的mapper标签namespace属性取值必须是dao接口的全限命名
第五个,映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
好处:当我们这样写的时候,不需要写dao实现类了。
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>
<!-- 外接属性配置文件 ,减少耦合-->
<properties resource="mysql.properties"></properties>
<!-- 这个包下的实体类自动起别名,为类名,无视大小写-->
<typeAliases>
<package name="domain"/>
</typeAliases>
<!-- 配置数据源-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<!-- pooled 连接池-->
<dataSource type="POOLED">
<!-- ${key}引用外部properties中的key-->
<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>
<!-- 接口Mapper文件的路径,按包指定-->
<mappers>
<package name="dao"/>
</mappers>
</configuration>
起别名和Mapper文件指定包更具价值。
实体类
public class User implements Serializable {
private Integer id;
private String name;
}
dao接口
public interface IUserDao {
List<User> findAll();
User findById(Integer id);
List<Account> findAccountsByUid(Integer id);
}
Mapper映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.IUserDao">
<resultMap id="userMap" type="user">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
</resultMap>
<select id="findAll" resultMap="userMap">
select * from users;
</select>
<select id="findById" resultType="user" parameterType="int">
select * from users where id=#{id}
</select>
</mapper>
ParameterType表示参数类型。若指定查询的数据不止一个,例如username和password必须同时符合,最好封装到对象中,#{property}表示从参数对象中取值,若只是一个值,指定类型即可,property值任意。
resultType:表示返回值类型,指定为一个对象。(只适合于简单查询)
resultMap:表示返回类型的映射。(当数据库的列名称和对象属性不一致时,当多表查询时,必须指定,可重用);
test代码:
@Before
public void init() throws IOException {
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
session= factory.openSession(true);
}
@org.junit.Test
public void test() throws IOException {
IUserDao userDao= session.getMapper(IUserDao.class);
List<User> all = userDao.findAll();
for (User user : all) {
System.out.println(user);
System.out.println(user.getAccounts());
}
}
结果:
增删改,只需要简单修改Mapper即可。