2018年7月21日 星期六

整合 Mybatis (SpringBoot 2.x 五)

※Annotation 設定


※build.gradle

compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'
compile 'com.alibaba:druid:1.1.10'

※druid 就是類似 c3p0 連線池的東西


※application.properties

spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@172.26.103.1:1521:lottery
spring.datasource.username=lott_new_a3d1
spring.datasource.password=Lottery2011
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

※可參考官網,搜尋 DATASOURCE


※controller

@Controller
@RequestMapping("/chess")
public class ChessAction {
    @Autowired
    private IChessService service;
    
    @RequestMapping(path = "/addChess")
    public String addChess(Chess chess) {
        return service.addChess(chess) == 1 ? "chess/success" : "chess/fail";
    }
}

※在 classpath 下templates 增加 chess 資料夾,增加成功和失敗頁的 html


※service & serviceImpl

public interface IChessService {
    int addChess(Chess chess);
}
    
    
@Service
@Transactional
public class ChessServiceImpl implements IChessService {
    @Autowired
    private IChessDAO chessDao;
    
    @Override
    public int addChess(Chess chess) {
        return chessDao.insertChess(chess);
    }
}




※dao

@Mapper
public interface IChessDAO {
    @Insert("INSERT INTO CHESS(ID, NAME, PRICE) VALUES(#{id}, #{name}, #{price})")
    public int insertChess(Chess chess);
}

※在測試類增加 @MapperScan("ooo.xxx.dao") 和這裡的 @Mapper 是一樣的意思,兩者取其一即可,但都寫也是 OK 的


※addChess.html

<form action="chess/addChess">
    編號:<input name="id" /><br />
    棋名:<input name="name" /><br />
    價錢:<input name="price" /><br />
    <input type="submit" value="送出" />
</form>




※測試類

@SpringBootApplication
// @MapperScan("ooo.xxx.dao")
@ComponentScan({ "ooo.xxx.serviceImpl", "ooo.xxx.controller", "ooo.xxx.dao" })
public class Test {
    public static void main(String[] args) {
        SpringApplication.run(Test.class, args);
    }
}

※啟動後,打上「http://localhost:9000/addChess.html」

※如果啟動出現錯誤 Consider defining a bean of type 'ooo.xxx.service.IChessService' in your configuration,那就要加上 @ComponentScan,第一章有說過,必需放在啟動類或啟動類的子類,但是我並沒有,所以使用這個 annotation 是個變通的方式

※要心心,這裡有一點錯,測試頁都會 Whitelabel Error Page


※XML 設定


※application.properties

mybatis.mapper-locations=ooo/xxx/mapper/*.xml
mybatis.type-aliases-package=ooo.xxx.javabean

※annotation 設定再加上這兩行,參考 mybatis 官網,注意範例是有加 mybatis. 開頭的

※注意mapper-locations 的路徑是用「/」分開,不是用「.」

※第二個是在 xml 的 parameterType 會自動加上這裡設定的前綴,如果不設定,那 xml 就只好全打出來了


※mapper

<?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="ooo.xxx.dao.IChessDAO">
    <insert id="insertChess" parameterType="Chess">
        INSERT INTO CHESS(ID, NAME, PRICE) VALUES(#{id}, #{name}, #{price})
    </insert>
</mapper>

※有了xml,dao 的 @Insert 就不需要了

※!DOCTYPE等的,是複製官網

沒有留言:

張貼留言