MyBatis 負責數據庫映射,Jersey (JAX-RS) 暴露 REST 接口,返回 JSON 數據。全流程:MySQL → POJO → Mapper → Service → REST Resource → Client。
CREATE TABLE `Student` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(256) NOT NULL,
`age` INT(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `Student` VALUES (1, 'zhansan', 20);
@XmlRootElement // JAXB 註解,支援 XML/JSON 自動轉換
public class Student {
private int id;
private String name;
private int age;
// getter/setter 省略
}
<mapper namespace="com.demo.studentMapper">
<select id="getStudent" parameterType="int" resultType="com.demo.Student">
SELECT * FROM Student WHERE id = #{id}
</select>
</mapper>
<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=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/demo/studentMapper.xml"/>
</mappers>
</configuration>
@Path("/student")
public class StudentResource {
private static final SqlSessionFactory factory;
static {
String resource = "conf.xml";
InputStream is = StudentResource.class.getClassLoader().getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(is);
}
@GET
@Path("/getstudent/{id}")
@Produces(MediaType.APPLICATION_JSON)
public Student getStudent(@PathParam("id") String id) {
SqlSession session = factory.openSession();
try {
return session.selectOne("com.demo.studentMapper.getStudent", Integer.valueOf(id));
} finally {
session.close();
}
}
}
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.demo</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
啟動 Tomcat,訪問 https://localhost:8080/project/rest/student/getstudent/1,響應:
{
"id": 1,
"name": "zhansan",
"age": 20
}
SqlSessionFactory、事務、Bean 生命週期MapperScannerConfigurer 自動掃描 MapperPOOLED