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是可以很友善的自由修改的,但如果與接口類路徑不同需要下面這句