一、初识Mybatis
1. 加入相关的jar包。
2. 创建相应的实体类bean。
3. 创建mybatis的配置文件。
4. 创建mybatis的映射文件。
5. mybatis的映射文件要引入到配置文件中。
6. 测试。
三、优化
1.如果映射文件中的查询条件有多个,则可以使用Map集合作为参数
2.将属性文件单独列出db.recourses,需要将属性文件导入Mybatis配置文件中,之后使用${}
<properties resource="db.properties"></properties>
${jdbc.driver}
3.为实体类起别名,为包下所有类起别名,别名为类名(不建议使用,不方便别人解读代码)
<typeAliases>
<package name="com.zhiyou100.klb.bean"/>
</typeAliases>
4.加入日志信息log4j.properties,方便我们查错
四、使用接口结合xml文件
1.创建一个接口,该接口要和映射文件匹配。方法名=ID名
2.映射文件中,命名空间要与映射文件路径一直,例如:com.zhiyou100.klb.dao.UsersDao
3.测试程序运行状况,
//解析conf.xml
Reader reader = Resources.getResourceAsReader("conf.xml");
//获取sessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//获取session对象,用于操作数据库
session = sessionFactory.openSession();
//得到接口的实现类
usersDao = session.getMapper(UsersDao.class);
五、解决数据库中的字段与类中的属性不匹配问题
1.在SQL语句中为字段起别名,别名与类的属性名一致
2.利用resultMap
<!--引用resultMap标签 -->
<select id="getClazz" parameterType="int" resultMap="clazzMap"></select>
<!--resultMap:写数学与字段的对应关系
type:表示哪个实体类与表的对应关系
-->
<resultMap type="com.zhiyou100.klb.bean.Clazz" id="clazzMap">
<!-- ID:表示表中的主键与实体类的属性的对应关系 -->
<id column="c_id" property="cid"/>
<result column="c_name" property="cname"/>
<result column="teacher_id" property="tid"/>
</resultMap>
六、联表查询
<!--引用resultMap标签 -->
<select id="getClazz" parameterType="int" resultMap="clazzMap">
select * from class c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id = #{id}
</select>
<!--resultMap:写数学与字段的对应关系
type:表示哪个实体类与表的对应关系
-->
<resultMap type="com.zhiyou100.klb.bean.Clazz" id="clazzMap">
<!-- ID:表示表中的主键与实体类的属性的对应关系 -->
<id column="c_id" property="cid"/>
<result column="c_name" property="cname"/>
<result column="teacher_id" property="tid"/>
<association property="teacher" javaType="com.zhiyou100.klb.bean.Teacher">
<id column="t_id" property="tid"/>
<result column="t_name" property="tname"/>
</association>
<collection property="students" ofType="com.zhiyou100.klb.bean.Student">
<id column="s_id" property="sid"/>
<result column="s_name" property="sname"/>
<result column="class_id" property="cid"/>
</collection>
<!-- <association property="teacher" javaType="com.zhiyou100.klb.bean.Teacher"
column="teacher_id" select="com.zhiyou100.klb.dao.TeacherDao.getTeacher">
</association> -->
</resultMap>
七、Mybatis中${ }和#{ }的区别
- $: 解析时不会为内容添加”” 他是sql语句的拼接存在sql注入的危害。传入的为表结构时。
- #: 解析时会为内容添加””,它的sql时采用占位符,防止sql注入。
八、添加对象时如何返回ID
<insert id="add" parameterType="Users" useGeneratedKeys="true" keyProperty="id">
insert into users(name,age) values(#{name},#{age})
</insert>