eclipse maven+mybatis+web專案(一)
建立maven專案
File -> new -> maven project
注意點:
Group Id : com.xiong
Artifact Id : test0904
Packaging : war
匯入依賴包
選擇需要的版本
複製裡面的程式碼
貼上到pom.xml裡面
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiong</groupId>
<artifactId>test0904</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId> mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
</dependencies>
</project>
mybatis、junit、javax.servlet-api、javax.servlet.jsp、jstl同樣的方法新增進去
在project中新增外掛
在Maven中配置測試外掛surefire
現在maven已經擁有操作tomcat的許可權了,但是這兩者之間想要通訊的話還需要一個橋樑,那就是在maven中配置tomcat外掛
maven是個專案管理工具,如果我們不告訴它我們的程式碼要使用什麼樣的jdk版本編譯的話,它就會用maven-compiler-plugin預設的jdk版本來進行處理,這樣就容易出現版本不匹配的問題,以至於可能導致編譯不通過的問題。例如程式碼中要是使用上了jdk1.7的新特性,但是maven在編譯的時候使用的是jdk1.6的版本,那這一段程式碼是完全不可能編譯成.class檔案的。為了處理這一種情況的出現,在構建maven專案的時候,我習慣性第一步就是配置maven-compiler-plugin外掛
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiong</groupId>
<artifactId>test0904</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 測試外掛surefire -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!-- 配置tomcat外掛 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8081</port>
<path>/</path>
</configuration>
</plugin>
<!-- jdk 1.8版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
建庫+表
create database test;
use test;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age INT);
INSERT INTO users(NAME, age) VALUES('Tom', 12);
INSERT INTO users(NAME, age) VALUES('Jack', 11);
新增Mybatis的配置檔案configuration.xml
新建四個package和一個configuration.xml
configuration.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>
<!-- 將mybatis的執行過程顯示在控制檯 <setting name="logImpl" value="STDOUT_LOGGING"
/> -->
<!-- 在用到級聯屬性的時候才會查詢 -->
<setting name="lazyLoadingEnabled" value="true" />
<!--true: 把所有級聯查詢都執行 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 將下劃線格式轉換為駝峰格式: table:user_name java: userName -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
<typeAliases>
<package name="cn.qdsoft.model" />
</typeAliases>
<!-- 對事務的管理和連線池的配置 -->
<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/test?useUnicode=true&characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- mapping 檔案路徑配置 -->
<mappers>
</mappers>
</configuration>
typeAliases
給java型別取一個別名,方便在核心配置、對映配置中來使用這個java型別
UserMapper.xml配置中,有這樣的配置資訊:
<select id="findUserById" resultType="com.yu.model.User" parameterType="long">
select * from t_user where id = #{id}
</select>
可以看到resultType屬性的值為com.yu.model.User,表示這個查詢返回的型別為com.yu.model.User型別。
如果有很多種型別的話,每次都得把型別的全路徑寫上,感覺就很費事。
所以就可以用mybatis提供的typeAliases來進行別名配置。
在核心配置檔案中加上配置:
<typeAliases>
<typeAlias type="com.yu.model.User" alias="User" />
<typeAlias type="com.yu.model.Org" alias="Org"/>
</typeAliases>
然後修改UserMapper.xml的配置:
<select id="findUserById" resultType="User" parameterType="long">
select * from t_user where id = #{id}
</select>
也可以通過掃描包的形式來進行:
<typeAliases>
<package name="net.mybatis.model"/>
</typeAliases>
另外,也可通過宣告的形式,譬如:
package net.mybatis.model;
import org.apache.ibatis.type.Alias;
@Alias("User")
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString(){
return this.getClass().getName()+":[name:"+this.name+"]";
}
}
定義表所對應的實體類
User.java
package cn.qdsoft.model;
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
定義DAO介面
package cn.qdsoft.dao;
import cn.qdsoft.model.User;
import java.util.List;
public interface UserDAO {
List<User> findAll();
}
定義操作users表的sql對映檔案userMapper.xml
user.mapper.xml
<?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">
<select id="findAll" resultType="User">
select id,name,email,password,birthdate,gender,province
from users
</select>
</mapper>
在mybatis中,對映檔案中的namespace是用於繫結Dao介面的,即面向介面程式設計。
當你的namespace繫結介面後,你可以不用寫介面實現類,mybatis會通過該繫結自動
幫你找到對應要執行的SQL語句,如下:
定義了UserDAO介面
public interface UserDAO
{
List<User> findAll();
}
對於對映檔案:
<mapper namespace="cn.qdsoft.dao.UserDAO">
<select id="findAll" resultType="User">
select id,name,age
from users
</select>
</mapper>
請注意介面中的方法與對映檔案中的SQL語句的ID一一對應 。
則在程式碼中可以直接使用IArticeDAO面向介面程式設計而不需要再編寫實現類。
在configuration.xml檔案中註冊userMapper.xml檔案
在configuration.xml檔案加入以下程式碼
<mappers>
<mapper resource="user.mapper.xml" />
</mappers>