你的位置:首页 > Java教程

[Java教程]mybatis入门笔记(上)


说到mybatis,我们首先说说ibatis,mybatis3.X是ibatis2.X的后期 版本,功能比ibatis强大了很多。

1、mybatis和ibatis比较

1.1、在 关系映射方面,mybatis相对ibatis的“嵌套查询”,多了“嵌套结果"查询的方式,嵌套查询会引发N+1查询问题,而嵌套结果查询可有效 避免。

1.2、mybatis实现了dao接口和

1.3、mybatis提供了新的功能:注解,并且新增了ognl表达式,简化

2、入门:

2.1、mybatis简介;

MyBatis是支持普通SQL查询存储过程高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的

2.2、加入jar包

mybatis

       mybatis-3.1.1.jar

【MYSQL驱动包】
mysql-connector-java-5.1.7-bin.jar

2.3、创建数据表

2.4、添加mybatis配置文件conf.

示例:(在配置过程中没有提示的朋友可以将dtd加入eclipse配置即可。)

其中数据源配置可将配置文件放到peoperties文件中,具体如下:

<properties resource="db.properties"/>

 

<property name="driver" value="${driver}" />

<property name="url" value="${url}" />

<property name="username" value="${username}" />

<property name="password" value="${password}" />

<?

 

 

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

         <environments default="development">

                  <environment id="development">

                          <transactionManager type="JDBC" />

                          <dataSource type="POOLED">

                                   <property name="driver" value="com.mysql.jdbc.Driver" />

                                   <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />

                                   <property name="username" value="root" />

                                   <property name="password" value="root" />

                          </dataSource>

                  </environment>

         </environments>

</configuration>

2.5定义pojo类

2.6为实体类定义别名

<typeAliases>

         <--! <typeAlias type="com.gsau.mybatis.bean.User" alias="_User"/>-->

<!-- 
类级别的别名映射
-->

        <package name="com.gsau.mybaits.bean"/>

<!-- 
包级别的别名映射,这时pojo类要放到同一包中,如上面的com.gsau.mybaits.bean
-->

</typeAliases>

2.7定义sql映射文件XXX.

<?

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.gsau.mybatis_test.test1.XXX">

       <select id="getUser" parameterType="int"

              resultType="com.gsau.mybatis.bean.User">

              select * from users where id=#{id}

       </select>

</mapper>

2.8在配置文件中注册

<mappers>

         <mapper resource="com/gsau/mybatis_test/test1/XXX.

</mappers>

2.9编写测试

public class Test {

         public static void main(String[] args) throws IOException {

                  String resource = "conf.

                  //加载mybatis的配置文件(它也加载关联的映射文件)

                  Reader reader = Resources.getResourceAsReader(resource);

                  //构建sqlSession的工厂

                  SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);

                  //创建能执行映射文件中sql的sqlSession

                  SqlSession session = sessionFactory.openSession();

                  //映射sql的标识字符串

                  String statement = "com.gsau.mybatis.bean.userMapper"+".selectUser";

                  //执行查询返回一个唯一user对象的sql

                  User user = session.selectOne(statement, 1);

                  System.out.println(user);

         }

}

3.1数据表的CRUD 操作

在没有配置别名映射的时候参数类型prametwrType以及结果类型resultType都需要写出实体类的全类名。以上配置使用的是包级别的别名映射。

<insert id="insertUser" parameterType="User">

         insert into users(name, age) values(#{name}, #{age});

</insert>

 

<delete id="deleteUser" parameterType="int">

         delete from users where id=#{id}

</delete>

                 

<update id="updateUser" parameterType="User">

         update users set name=#{name},age=#{age} where id=#{id}

</update>

                 

<select id="selectUser" parameterType="int" resultType="User">

         select * from users where id=#{id}

</select>

                 

<select id="selectAllUsers" resultType="User">

         select * from users

</select>

3.2在conf.

3.3在dao中调用sql映射文件

4、注解的实现

4.1定义sql映射的接口

public interface UserMapper {

         @Insert("insert into users(name, age) values(#{name}, #{age})")

         public int insertUser(User user);

 

         @Delete("delete from users where id=#{id}")

         public int deleteUserById(int id);

                         

         @Update("update users set name=#{name},age=#{age} where id=#{id}")

         public int updateUser(User user);

 

         @Select("select * from users where id=#{id}")

         public User getUserById(int id);

 

         @Select("select * from users")

         public List<User> getAllUser();

}

4.2在conf.

<mapper />

4.3在dao中调用

4.4可加入log4j配置文件,有properties和

5、如果结果类型是多个可使用resultMap,将resultType替换,或者给查询结果列定义别名和实体类对应。

示例:

<select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">

         select * from orders where order_id=#{id}

</select>

 

<resultMap type="_Order" id="orderResultMap">

         <id property="id" column="order_id"/>

         <result property="orderNo" column="order_no"/>

         <result property="price" column="order_price"/>

</resultMap>