cretateEMP.sql
CREATE TABLE `EMP` (
`EMPNO` decimal(4,0) NOT NULL,
`ENAME` varchar(10) default NULL,
`JOB` varchar(9) default NULL,
`MGR` decimal(4,0) default NULL,
`HIREDATE` date default NULL,
`SAL` decimal(7,2) default NULL,
`COMM` decimal(7,2) default NULL,
`DEPTNO` decimal(2,0) NOT NULL,
PRIMARY KEY (`EMPNO`)
)
examples.resources.SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- DB接続設定 -->
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.gjt.mm.mysql.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:mysql://192.168.0.13:3306/XXXXX_db?useUnicode=true&characterEncoding=Windows-31J"/>
<property name="JDBC.Username" value="XXXXX"/>
<property name="JDBC.Password" value="XXXXX"/>
</dataSource>
</transactionManager>
<!-- 複数のsqlMapファイル参照する -->
<sqlMap resource="examples/sqlmap/maps/SqlMap-Dept.xml"/>
<sqlMap resource="examples/sqlmap/maps/SqlMap-Emp.xml"/>
<sqlMap resource="examples/sqlmap/maps/SqlMap-Custom.xml"/>
</sqlMapConfig>
util.MyAppSqlConfig.java
package util;
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
/**
* SqlMapClientを返すためのクラス
*/
public class MyAppSqlConfig {
private static SqlMapClient sqlMap;
static {
try {
String resource = "examples/resources/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlMapClient getSqlMapInstance(){
//Singletoneとして利用
return sqlMap;
}
}
examples.sqlmap.maps.SqlMap-Emp.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<!-- SQLでマッピングする記述方法。ifnullはDBMSの関数 -->
<select id="getEmpByEmpno" resultClass="examples.dto.Emp">
SELECT
EMPNO,
ENAME,
JOB,
MGR as manager,
HIREDATE,
SAL as salary,
ifnull(COMM, 0.0) as commission,
DEPTNO
FROM EMP
WHERE EMPNO = #value#
</select>
<select id="allEmp1" resultClass="examples.dto.Emp">
SELECT
EMPNO,
ENAME,
JOB,
MGR as manager,
HIREDATE,
SAL as salary,
ifnull(COMM, 0.0) as commission,
DEPTNO
FROM EMP
</select>
<!-- resultMapを記述してIBATISの機能でマッピングする方法
DBに依存しない記述 -->
<resultMap id="rm1" class="examples.dto.Emp">
<result column="EMPNO" property="empno"/>
<result column="ENAME" property="ename"/>
<result column="JOB" property="job"/>
<result column="MGR" property="manager"/>
<result column="HIREDATE" property="hiredate"/>
<result column="SAL" property="salary"/>
<result column="COMM" property="commission" nullValue="0.0"/> <!-- NULLの時の指定 -->
<result column="DEPTNO" property="deptno"/>
</resultMap>
<select id="allEmp2" resultMap="rm1">
SELECT * FROM EMP
</select>
<!-- 動的SQLの例
条件指定されときのみWHERE句が付加される -->
<select id="searchEmp" parameterClass="examples.dto.SearchEmpParam" resultMap="rm1">
SELECT * FROM EMP
<dynamic prepend="WHERE">
<isNotNull prepend="AND" property="ename">
ENAME like #ename# <!-- ename条件がnullでないとき -->
</isNotNull>
<isNotEqual compareValue="0" prepend="AND" property="deptno">
DEPTNO = #deptno# <!-- deptno条件が0でないとき -->
</isNotEqual>
</dynamic>
</select>
<!-- 動的SQLの例
INで指定する値が可変 -->
<select id="searchEmpIn" parameterClass="examples.dto.SearchEmpParam" resultMap="rm1">
SELECT * FROM EMP
<iterate property="empnoList" prepend="WHERE EMPNO IN" open="(" close=")" conjunction="," >
#empnoList[]#
</iterate>
</select>
<!-- 動的SQLの例
文字列でSQL文そのものを指定 -->
<select id="searchEmpOrder" resultMap="rm1">
SELECT * FROM EMP
ORDER BY $value$
</select>
</sqlMap>
examples.dto.Emp.java
package examples.dto;
import java.sql.Date;
public class Emp {
private int empno;
private String ename;
private String job;
private String manager;
private Date hiredate;
private float salary;
private float commission;
private int deptno;
public float getCommission() {
return commission;
}
public void setCommission(float commission) {
this.commission = commission;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getManager() {
return manager;
}
public void setManager(String manager) {
this.manager = manager;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
}
View01.java
package eo.sim.tool;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
/**
*
*
*/
public class View01 extends JFrame implements ActionListener {
// 従業員番号
JTextField text1 = null;
// 従業員名
JTextField text2 = null;
// 職種
JTextField text3 = null;
/**
* 開始メソッド
*
* @param args パラメータ
*/
public static void main(String[] args){
View01 frame = new View01();
// 閉じるボタンをクリックされた場合の動作を設定
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// ウインドウのタイトルを設定
frame.setTitle("mybatis-2.3.5とswingのサンプル");
// フレームの X座標、Y座標、幅、高さを設定
frame.setBounds(100, 200, 450, 220);
// フレームを表示(これをしないと透明のフレームが立ち上がってしまう)
frame.setVisible(true);
}
/**
* コンストラクタ
*/
public View01() {
// ベースとなるパネルをLayoutManagerを無効にして作成
JPanel panelBase = new JPanel();
panelBase.setLayout(null);
// ラベルを作成
// 従業員番号
JLabel label1 = new JLabel("従業員番号");
// 位置を設定
label1.setBounds(10, 10, 80, 30);
// 従業員名
JLabel label2 = new JLabel("従業員名");
// 位置を設定
label2.setBounds(10, 50, 80, 30);
// 職種
JLabel label3 = new JLabel("従業員名");
// 位置を設定
label3.setBounds(10, 90, 80, 30);
// テキストを作成
// 従業員番号
text1 = new JTextField("7369");
// サイズを設定
text1.setPreferredSize(new Dimension(100, 14));
// 枠を設定
text1.setBorder(new BevelBorder(BevelBorder.LOWERED));
// 位置を設定
text1.setBounds(100, 10, 80, 30);
// 従業員名
text2 = new JTextField("");
// サイズを設定
text2.setPreferredSize(new Dimension(100, 14));
// 枠を設定
text2.setBorder(new BevelBorder(BevelBorder.LOWERED));
// 位置を設定
text2.setBounds(100, 50, 80, 30);
// 従業員名
text3 = new JTextField("");
// サイズを設定
text3.setPreferredSize(new Dimension(100, 14));
// 枠を設定
text3.setBorder(new BevelBorder(BevelBorder.LOWERED));
// 位置を設定
text3.setBounds(100, 90, 80, 30);
// ボタンを作成
JButton button1 = new JButton("検索");
// 位置を設定
button1.setBounds(200, 10, 80, 30);
// アクションリスナー追加
button1.addActionListener(this);
// パネルに配置
panelBase.add(label1);
panelBase.add(label2);
panelBase.add(label3);
panelBase.add(text1);
panelBase.add(text2);
panelBase.add(text3);
panelBase.add(button1);
// ベースパネルを追加
getContentPane().add(panelBase, BorderLayout.CENTER);
}
/*
* アクション
*/
public void actionPerformed(ActionEvent e) {
String empName="";
String job="";
if (e.getActionCommand().equals("検索")) {
EmpService empService = new EmpService();
try {
empName = empService.getEmpName(text1.getText());
job = empService.getJob(text1.getText());
} catch (Exception e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
}
text2.setText(empName);
text3.setText(job);
}
}
}
EmpService.java
package eo.sim.tool;
import com.ibatis.sqlmap.client.SqlMapClient;
import examples.dto.Emp;
import util.MyAppSqlConfig;
public class EmpService {
public String getEmpName(String empno) throws Exception {
SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
/*
* DeptNoを指定して1件のDeptを取得
*/
int intEmpno = (Integer.valueOf(empno)).intValue();
Emp emp = (Emp)sqlMap.queryForObject("getEmpByEmpno",intEmpno);
return emp.getEname();
}
public String getJob(String empno) throws Exception {
SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
/*
* DeptNoを指定して1件のDeptを取得
*/
int intEmpno = (Integer.valueOf(empno)).intValue();
Emp emp = (Emp)sqlMap.queryForObject("getEmpByEmpno",intEmpno);
return emp.getJob();
}
}