天天看點

mybatis使用Mapper接口方式與sqlSession傳sqlID方式基本配置

mybatis-config.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>

    <!-- 為JAVA Bean起類别名 -->
    <typeAliases>
        <typeAlias alias="User" type="com.xuxd.entity.User" />
    </typeAliases>

    <!-- 配置攔截器 -->
    <plugins>
        <plugin interceptor="com.xuxd.interceptor.BackCntsInterceptor">
        </plugin>
    </plugins>

    <!-- 配置mybatis運作環境 -->
    <environments default="mybatis">
        <environment id="mybatis">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <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>

    <!-- 配置映射檔案  -->
    <mappers>
        <mapper resource="mapper/UserDao.xml"></mapper>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>

</configuration>
           

mysql.properties

#資料庫連接配接資訊
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/demodb?useUnicode=true&characterEncoding=UTF-8&useSSL=true
jdbc.username=root
jdbc.password=123456
           

使用Mapper接口方式與使用sqlSession傳sqlID方式上面的配置資訊都是一樣的

使用Mapper接口方式如下:

/**
 * Created by dong on 2016/12/15.
 */
@Repository("userDaoNoImpl")
public interface UserMapper {
    public List<User> findUserByNameAge(@Param("username") String username1, @Param("age") int age);
    public void saveUser(User user);
    public void updatePassByName(@Param("username") String username, @Param("password") String password);
    public void deleteByName(@Param("username") String username);
}
           

映射檔案UserMapper.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xuxd.dao.UserMapper">

    <sql id="user_column">
        username,password,age
    </sql>

    <!-- 自定義傳回結果集 -->
    <resultMap id="User" type="User">
        <result property="username" column="username" javaType="java.lang.String"></result>
        <result property="password" column="password" javaType="java.lang.String"></result>
    </resultMap>

    <!--根據使用者名和年齡查詢-->
    <select id="findUserByNameAge" resultMap="User">
        select * from user1 where username=#{username} and age=#{age}
    </select>

    <!--  增加使用者 -->
    <insert id="saveUser" parameterType="User">
        insert into user1
        (<include refid="user_column"/>)
        values
        (#{username},#{password},#{age})
    </insert>
    <!--  通過使用者名修改使用者密碼  -->
    <update id="updatePassByName" parameterType="String">
        update user1 set password=#{password} where username=#{username}
    </update>
    <!--  通過使用者名删除使用者  -->
    <delete id="deleteByName" parameterType="String">
        delete from user1 where username=#{username}
    </delete>
</mapper>
           

注意:【下面這幾句總結參考:https://my.oschina.net/u/1757476/blog/500079】

Mapper 接口方法名 和 UserMapper.xml 中定義的每個 sql 的 id 同名。

Mapper 接口方法的輸入參數類型和 UserMapper.xml 中定義的 sql parameterType 類型相同。

Mapper 接口的輸出參數類型和 UserMapper.xml 中 定義的 sql 的 resultType 類型相同。

UserMapper.xml 檔案中的 namespace 即是 Mapper 接口的類路徑。

sqlSession傳sqlID方式

/**
 * Created by dong on 2016/12/15.
 */
public interface UserDao {

    public List<User> getUserForList(String sqlId, User user);
    public void saveUser(String sqlId, User user);
    public void updatePassByName(String sqlId, User user);
    public void deleteByName(String sqlId, User user);
}

/**
 * Created by dong on 2017/1/13.
 */
@Repository("userDaoImpl")
public class UserDaoImpl implements UserDao {
    private static final Logger log = LoggerFactory.getLogger(UserDao.class);

    private SqlSession session = DBTools.getSession("mybatis-config.xml");

    public List<User> getUserForList(String sqlId, User user) {
        return session.selectList(sqlId, user);
    }

    public void saveUser(String sqlId, User user) {
        session.insert(sqlId, user);
        session.commit();
    }

    public void updatePassByName(String sqlId, User user) {
        session.update(sqlId, user);
        session.commit();
    }

    public void deleteByName(String sqlId, User user) {
        session.delete(sqlId, user);
        session.commit();
    }

    private static class DBTools {
        private static SqlSession getSession(String resource) {
            //使用MyBatis提供的Resources類加載mybatis的配置檔案
            Reader reader = null;
            try {
                reader = Resources.getResourceAsReader(resource);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //建構sqlSession的工廠
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            //建立能執行映射檔案中sql的sqlSession
            SqlSession session = sessionFactory.openSession();

            //session.getConfiguration().addMapper(UserDao.class);
            return session;
        }


        private static void closeSession(SqlSession session) {
            session.close();
        }
    }

}
           
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xuxd.dao.UserDao">

    <sql id="user_column">
        username,password,age
    </sql>

    <!-- 自定義傳回結果集 -->
    <resultMap id="User" type="User">
        <result property="username" column="username" javaType="java.lang.String"></result>
        <result property="password" column="password" javaType="java.lang.String"></result>
    </resultMap>

    <!--根據使用者名和年齡查詢-->
    <select id="getUserForList" resultMap="User">
        select * from user1 where username=#{username} and age=#{age}
    </select>

    <!--  增加使用者 -->
    <insert id="saveUser" parameterType="User" >
        insert into user1
        (<include refid="user_column"/>)
        values
        (#{username},#{password},#{age})
    </insert>
    <!--  通過使用者名修改使用者密碼  -->
    <update id="updatePassByName" parameterType="User">
        update user1 set password=#{password} where username=#{username}
    </update>
    <!--  通過使用者名删除使用者  -->
    <delete id="deleteByName" parameterType="User">
        delete from user1 where username=#{username}
    </delete>
</mapper>
           

這種方式增、删、改會自動開啟事務,是以需要session.commit,查詢不需要

sqlSession傳sqlID這種方式mapper的namespace是可以很友善的自由修改的,但如果與接口類路徑不同需要下面這句

繼續閱讀