Spring中的ORM

ORM簡介

對象關(guān)系映射,是一種程序技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換.從效果上說,它其實(shí)是創(chuàng)建了一個可在編程語言里使用的--"虛擬對象數(shù)據(jù)庫".
ORM的方法論基于三個核心原則:

  • 簡單:以最基本的形式建模數(shù)據(jù)
  • 傳達(dá)性:數(shù)據(jù)庫結(jié)構(gòu)被任何人都能理解的語言文檔化
  • 精確性:基于數(shù)據(jù)模型創(chuàng)建正確標(biāo)準(zhǔn)化的結(jié)構(gòu)

Spring對ORM的框架支持

spring中支持ORM的框架有hibernate、mybatis哄尔、JPA等.但是其中JPA是一種規(guī)范,hibernate和mybatis都遵循JPA規(guī)范,在應(yīng)用中:

建立新的模塊,添加依賴


image

在資源包中添加連接數(shù)據(jù)庫的文件和配置
jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db_spring?useUnicode=true&useSSL=false&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

spring_mybatis.xml

<context:property-placeholder location="classpath:jdbc.properties"/>

<context:component-scan base-package="com.spring.orm.service"/>

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="{jdbc.driverClassName}"/> <property name="url" value="{jdbc.url}"/>
<property name="username" value="{jdbc.username}"/> <property name="password" value="{jdbc.password}"/>

<property name="initialSize" value="20"/>

<property name="maxActive" value="20"/>

<property name="minIdle" value="0"/>

<property name="maxWait" value="60000"/>

<property name="timeBetweenEvictionRunsMillis" value="60000"/>

<property name="minEvictableIdleTimeMillis" value="300000"/>

<property name="testWhileIdle" value="false"/>

<property name="testOnBorrow" value="false"/>

<property name="testOnReturn" value="false"/>

<property name="poolPreparedStatements" value="true"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.spring.orm.entity"/>
</bean>

<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.spring.orm.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="markerInterface" value="com.spring.orm.dao.BaseDAO"/>
<property name="properties">
<value>
mappers = com.spring.orm.dao.BaseDAO
IDENTITY = MYSQL
</value>
</property>
</bean>

<bean id="manager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

<tx:annotation-driven transaction-manager="manager"/>

完成類中的編寫
User

@Table(name = "t_user")//表單的名稱
@Data
public class User {
//標(biāo)注主鍵和主鍵生成策略
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String account;
private String password;
private Integer credits;
}

BaseDAO
public interface BaseDAO<T> extends Mapper<T>, MySqlMapper<T> {
}

UserDAO
public interface UserDAO extends BaseDAO<User>{
}

UserService
List<User> selectUsers();//查詢所有
int addUsers(User user);//插入
int deleteUser(long id);//刪除
int updateUser(User user);//更新
User selectOneUser(long id);//根據(jù)id查詢

UserServiceImpl
//標(biāo)注本類是一個Service組件
@Service
//在Service層啟動事務(wù)
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public List<User> selectUsers() {
return userDAO.selectAll();
}
@Override
public int addUsers(User user) {
return userDAO.insert(user);
}
@Override
public int deleteUser(long id) {
return userDAO.deleteByPrimaryKey(id);
}
@Override
public int updateUser(User user) {
return userDAO.updateByPrimaryKey(user);
}
@Override
public User selectOneUser(long id) {
return userDAO.selectByPrimaryKey(id);
}
}

最后進(jìn)行測試

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宾茂,一起剝皮案震驚了整個濱河市捺癞,隨后出現(xiàn)的幾起案子备蚓,更是在濱河造成了極大的恐慌硼啤,老刑警劉巖过牙,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件威彰,死亡現(xiàn)場離奇詭異肝谭,居然都是意外死亡掘宪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門攘烛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魏滚,“玉大人,你說我怎么就攤上這事坟漱∈蟠危” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵芋齿,是天一觀的道長腥寇。 經(jīng)常有香客問我,道長觅捆,這世上最難降的妖魔是什么花颗? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮惠拭,結(jié)果婚禮上扩劝,老公的妹妹穿的比我還像新娘。我一直安慰自己职辅,他們只是感情好棒呛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著域携,像睡著了一般簇秒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秀鞭,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天趋观,我揣著相機(jī)與錄音,去河邊找鬼锋边。 笑死皱坛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的豆巨。 我是一名探鬼主播剩辟,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贩猎?” 一聲冷哼從身側(cè)響起熊户,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吭服,沒想到半個月后嚷堡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡艇棕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年蝌戒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欠肾。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓶颠,死狀恐怖拟赊,靈堂內(nèi)的尸體忽然破棺而出刺桃,到底是詐尸還是另有隱情,我是刑警寧澤吸祟,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布瑟慈,位于F島的核電站,受9級特大地震影響屋匕,放射性物質(zhì)發(fā)生泄漏葛碧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一过吻、第九天 我趴在偏房一處隱蔽的房頂上張望进泼。 院中可真熱鬧,春花似錦纤虽、人聲如沸乳绕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洋措。三九已至,卻和暖如春杰刽,著一層夾襖步出監(jiān)牢的瞬間菠发,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工贺嫂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滓鸠,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓第喳,卻偏偏與公主長得像哥力,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容