先把我的sample 丟上來,範例我也是照網路上的sample小改一下
MemberData.java
package com.sivalabs.mybatisdemo.domain;
public class MemberData {
private Integer userId;
private String emailId;
private String password;
private String firstName;
private String lastName;
public Integer getUserId() {
return userId;
}
public void setUser_id(Integer userId) {
this.userId = userId;
}
public String getEmailId() {
return emailId;
}
public void setEmail_id(String emailId) {
this.emailId = emailId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
String strSql = "User_test [userId=" + userId + ", emailId=" + emailId
+ ", password=" + password + ", firstName=" + firstName
+ ", lastName=" + lastName + "]";
return strSql;
}
Create mybatis-config.xml (放在config\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>
<settings>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<!--
<typeAliases>
<typeAlias type="model.Visitor" alias="Visitor" />
</typeAliases>
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<!-- ?useUnicode=true&characterEncoding=utf8为了支持中文插入 -->
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:XXXX" />
<property name="username" value="XXXX" />
<property name="password" value="XXXXXXXXX" />
<property name="poolMaximumActiveConnections" value="50"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource='com/sivalabs/mybatisdemo/mappers/UserMapper.xml'/>
</mappers>
</configuration>
resource就是要對應到設定sql的頁面
上面這支,由於我是使用oracle,如果是用mysql 可上網查一下設定
UserMapper.xml (放在com.sivalabs.mybatisdemo.mappers)
<?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='com.sivalabs.mybatisdemo.mappers.UserMapper'>
<mapper namespace='com.sivalabs.mybatisdemo.mappers.UserMapper'>
<select id='getUserById' parameterType='int' resultType='com.sivalabs.mybatisdemo.domain.MemberData'>
SELECT
user_id as userId,
email_id as emailId ,
password,
first_name as firstName,
last_name as lastName
FROM USER_TEST
WHERE USER_ID = #{userId}
</select>
<!-- Instead of referencing Fully Qualified Class Names we can register Aliases in mybatis-config.xml and use Alias names. -->
<resultMap type='com.sivalabs.mybatisdemo.domain.MemberData' id='UserResult'>
<id property='userId' column='user_id'/>
<result property='emailId' column='email_id'/>
<result property='password' column='password'/>
<result property='firstName' column='first_name'/>
<result property='lastName' column='last_name'/>
</resultMap>
<select id='getAllUsers' resultMap="UserResult" resultType='com.sivalabs.mybatisdemo.domain.MemberData'>
SELECT * FROM USER_TEST
</select>
//useGeneratedKeys="true"keyProperty="MemberData.userId"
<insert id='insertUser' parameterType='com.sivalabs.mybatisdemo.domain.MemberData' >
INSERT INTO USER_TEST(user_id,email_id, password, first_name, last_name)
VALUES(#{userId},#{emailId}, #{password}, #{firstName}, #{lastName})
</insert>
</mapper>
上面在Insert這段 有兩個屬性 useGeneratedKeys及keyProperty 網路上說明是指是否自動新增ID
我傳model使用的結果不OK,於是我把它拿掉自己塞ID,反正到時我也是用select sequno的方式自動取號
MyBatisUtil.java (用來連資料庫用的)
package com.sivalabs.mybatisdemo.service;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static SqlSessionFactory factory;
private MyBatisUtil() {
}
static {
Reader reader = null;
try {
reader = Resources.getResourceAsReader("config/mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return factory;
}
}
UserService.java (相當於呼叫資料)
package com.sivalabs.mybatisdemo.service;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.sivalabs.mybatisdemo.domain.MemberData;
import com.sivalabs.mybatisdemo.mappers.User_TestMapper;
public class UserService
{
public void insertUser(MemberData user) {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try{
User_TestMapper userMapper = sqlSession.getMapper(User_TestMapper.class);
userMapper.insertUser(user);
sqlSession.commit();
}finally{
sqlSession.close();
}
}
public MemberData getUserById(Integer userId) {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try{
// User_TestMapper userMapper = sqlSession.getMapper(User_TestMapper.class);
MemberData userMapper = (MemberData) sqlSession.selectOne("com.sivalabs.mybatisdemo.mappers.UserMapper.getUserById", 3);
return userMapper;
finally{
sqlSession.close();
}
}
public List<MemberData> getAllUsers() {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try{
List<MemberData> listMember = sqlSession.selectList("com.sivalabs.mybatisdemo.mappers.UserMapper.getAllUsers");
return listMember;
/*
User_TestMapper userMapper = sqlSession.getMapper(User_TestMapper.class);
return userMapper.getAllUsers();
*/
}finally{
sqlSession.close();
}
}
public void updateUser(MemberData user) {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try{
User_TestMapper userMapper = sqlSession.getMapper(User_TestMapper.class);
userMapper.updateUser(user);
sqlSession.commit();
}finally{
sqlSession.close();
}
}
public void deleteUser(Integer userId) {
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try{
User_TestMapper userMapper = sqlSession.getMapper(User_TestMapper.class);
userMapper.deleteUser(userId);
sqlSession.commit();
}finally{
sqlSession.close();
}
}
}
看到紅字的部分getMapper(Class) 這個我沒搞定,就先用select系列的吧!!
基本上可使用selectone、selectList、update、delete等 光看名子就知道使用時機
所以當你一次要搜尋多筆則要選擇selectList 反之一筆的話就是selectone
接下來就自己建立一個測試用頁面
參考原始網址:http://www.javacodegeeks.com/2012/11/mybatis-tutorial-crud-operations-and-mapping-relationships-part-1.html