摘要:操作操作對象設置緩存時間有效時間等待等待設置為的時候后面可能取到值,的過期時間有延遲注意操作對象時對象需要實現序列化接口兩者操作互不影響生成為生稱為數據庫文件相關相關相關相關相關相關相關相關相關相關相關相關
springboot_database
springboot1.5.7集成mybatis、jpa、redis、mongodb,對不同數據庫進行操作的實例
項目代碼獲取:https://github.com/pysasuke/s...
jpa:jpa與mysql數據庫交互類
public interface JpaUserRepository extends JpaRepository{ //jpa有默認實現類似findBy*(支持*And*)方法,其中*號為實體屬性名(名稱寫的不對會報錯哦) JpaUser findByUsername(String username); @Query("select count(u.id) from JpaUser u") long count(); @Query("select u from JpaUser u where u.id=:id") JpaUser findUserById(@Param("id") long id); }
mongo:mongodb數據庫交互類
public interface MongoUserRepository extends MongoRepository{ //有默認實現類似findBy*(支持*And*)方法,其中*號為實體屬性名 MgUser findByNickname(String nickname); //根據id為條件搜索(默認實現的findOne方法是以mongodb中ObjectId為條件的) MgUser findById(Long id); }
mybatis:mybatis與mysql數據庫交互類
//@Mapper(SpringbootDatabaseApplication類中使用了@MapperScan注解,故此處可以省略) public interface TuserMapper { int deleteByPrimaryKey(Long id); int insert(Tuser record); Tuser selectByPrimaryKey(Long id); Tuser selectByUserName(String username); int updateByPrimaryKeySelective(Tuser record); }entity:實體對象層
jpa:jpa操作mysql相關實體對象
@Data @Entity//標記這個類為數據庫表映射實體 @Table(name="user")//對應數據庫表名 public class JpaUser implements Serializable{ @Id//標記為主鍵 @GeneratedValue//標記主鍵自增 private Long id; private String username; private String password; private String mobile; private String email; }
mongo:mongodb相關實體對象
@Data //需要與mongo中對象(文檔)名一致 public class MgUser { @Id private ObjectId _id; //插入mongo時會自動生成_id,如果不加這個字段則會把id屬性當成_id @Field private Long id; private String nickname; private String phone; }
mybatis:mybatis操作mysql相關實體對象
@Data public class Tuser { private Long id; private String username; private String password; private String mobile; private String email; }
redis:redis相關實體對象
//redisTemplate操作對象時對象需要實現序列化接口 @Data public class Person implements Serializable{ private Long serialVersionUID=1L; private Long id; private String username; private String password; }SpringbootDatabaseApplication:springboot啟動類
@SpringBootApplication // mapper 接口類掃描包配置(可以省去dao層類上注解@Mapper) @MapperScan("com.py.springboot_database.dao.mybatis") public class SpringbootDatabaseApplication { public static void main(String[] args) { SpringApplication.run(SpringbootDatabaseApplication.class, args); } }resources
mapper:mybatis實體類映射文件存放包
application.properties:springboot配置文件
## 數據源配置 spring.datasource.url=jdbc:mysql://localhost:3306/springboot_database?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=py123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ## Mybatis 配置 ##指向實體類包路徑 mybatis.typeAliasesPackage=com.py.springboot_database.entity.mybatis ##配置為 classpath 路徑下 mapper 包下,* 代表會掃描所有 xml 文件 mybatis.mapperLocations=classpath:mapping/*.xml ## mongodb配置 spring.data.mongodb.uri=mongodb://localhost:27017/test ## Redis 配置 ## Redis數據庫索引(默認為0) spring.redis.database=0 ## Redis服務器地址 spring.redis.host=127.0.0.1 ## Redis服務器連接端口 spring.redis.port=6379 ## Redis服務器連接密碼(默認為空) spring.redis.password= ## 連接池最大連接數(使用負值表示沒有限制) spring.redis.pool.max-active=8 ## 連接池最大阻塞等待時間(使用負值表示沒有限制) spring.redis.pool.max-wait=-1 ## 連接池中的最大空閑連接 spring.redis.pool.max-idle=8 ## 連接池中的最小空閑連接 spring.redis.pool.min-idle=0 ## 連接超時時間(毫秒) spring.redis.timeout=0test
jpa:TestJpa類,jpa操作mysql對象增刪改查操作測試
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = SpringbootDatabaseApplication.class) public class TestJpa { @Autowired private JpaUserRepository jpaUserRepository; @Test public void testInsert() { long countBefore =jpaUserRepository.count(); JpaUser jpaUser = generateJpaUser(); jpaUserRepository.save(jpaUser); long countAfter =jpaUserRepository.count(); Assert.assertEquals(++countBefore,countAfter); } @Test public void testSelect() { JpaUser jpaUser = generateJpaUser(); /* 插入成功后id會有值(mysql數據庫生成的) 前提是: 1.數據庫主鍵設置為自動增長 2.實體對象主鍵屬性上有注解@Id和@GeneratedValue */ jpaUserRepository.save(jpaUser); JpaUser selectedJpaUser = jpaUserRepository.findOne(jpaUser.getId()); Assert.assertNotNull(selectedJpaUser); Assert.assertEquals(jpaUser, selectedJpaUser); } @Test public void testUpdate() { JpaUser jpaUser = generateJpaUser(); jpaUserRepository.save(jpaUser); JpaUser selectedJpaUser = jpaUserRepository.findOne(jpaUser.getId()); Assert.assertNotNull(selectedJpaUser); selectedJpaUser.setPassword("654321"); //保存修改后的對象,相當于update操作 jpaUserRepository.save(selectedJpaUser); //findOne(默認實現)方法與findUserById(自己實現)都是根據id查找 JpaUser updatedJpaUser = jpaUserRepository.findUserById(selectedJpaUser.getId()); Assert.assertNotNull(updatedJpaUser); Assert.assertEquals(selectedJpaUser.getPassword(), updatedJpaUser.getPassword()); } @Test public void testDelete() { JpaUser jpaUser = generateJpaUser(); jpaUserRepository.save(jpaUser); jpaUserRepository.delete(jpaUser.getId()); JpaUser selectedJpaUser = jpaUserRepository.findUserById(jpaUser.getId()); Assert.assertNull(selectedJpaUser); } private JpaUser generateJpaUser() { JpaUser jpaUser = new JpaUser(); jpaUser.setUsername("zhangsan"); jpaUser.setPassword("123456"); jpaUser.setMobile("13666666666"); jpaUser.setEmail("123456@qq.com"); return jpaUser; } }
mongo:TestMongo類,mongodb測試
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = SpringbootDatabaseApplication.class) public class TestMongo { @Autowired private MongoUserRepository userRepository; @Test public void test() { MgUser mgUser = new MgUser(); mgUser.setId(1L); mgUser.setNickname("pysasuke"); mgUser.setPhone("18650140605"); //插入成功后_id屬性有值(mongo數據庫生成的) userRepository.insert(mgUser); //該方法使用的是mongodb中ObjectId為條件的 // MgUser selectMgUser = userRepository.findOne(1L); // MgUser selectMgUser = userRepository.findByNickname("pysasuke"); MgUser selectMgUser = userRepository.findById(1L); Assert.assertEquals(mgUser.getId(), selectMgUser.getId()); } }
mybatis:TestMybatis類,mybatis操作mysql對象增刪改查測試
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = SpringbootDatabaseApplication.class) public class TestMybatis { @Autowired private TuserMapper tuserMapper; @Test public void testInsert() { Tuser tuser = generateTuser(); int row = tuserMapper.insert(tuser); Assert.assertEquals(1, row); } @Test public void testSelect() { Tuser tuser = generateTuser(); /* 插入成功后id會有值(mysql數據庫生成的) 前提是: 1.主鍵設置為自動增長 2.xml中insert語句設置有:useGeneratedKeys="true" keyProperty="id" */ int row = tuserMapper.insert(tuser); Assert.assertEquals(1, row); Tuser selectedTuser = tuserMapper.selectByPrimaryKey(tuser.getId()); Assert.assertNotNull(selectedTuser); Assert.assertEquals(tuser, selectedTuser); } @Test public void testUpdate() { Tuser tuser = generateTuser(); int row = tuserMapper.insert(tuser); Assert.assertEquals(1, row); Tuser selectedTuser = tuserMapper.selectByPrimaryKey(tuser.getId()); Assert.assertNotNull(selectedTuser); selectedTuser.setPassword("654321"); tuserMapper.updateByPrimaryKeySelective(selectedTuser); Tuser updatedTuser = tuserMapper.selectByPrimaryKey(selectedTuser.getId()); Assert.assertNotNull(updatedTuser); Assert.assertEquals(selectedTuser.getPassword(), updatedTuser.getPassword()); } @Test public void testDelete() { Tuser tuser = generateTuser(); int row = tuserMapper.insert(tuser); Assert.assertEquals(1, row); tuserMapper.deleteByPrimaryKey(tuser.getId()); Tuser selectedTuser = tuserMapper.selectByPrimaryKey(tuser.getId()); Assert.assertNull(selectedTuser); } private Tuser generateTuser() { Tuser tuser = new Tuser(); tuser.setUsername("zhangsan"); tuser.setPassword("123456"); tuser.setMobile("13666666666"); tuser.setEmail("123456@qq.com"); return tuser; } }
redis:TestRedis類,redis測試
/* 當redis數據庫里面本來存的是字符串數據或者要存取的數據就是字符串類型數據的時候, 那么使用StringRedisTemplate即可, 但是如果數據是復雜的對象類型,而取出的時候又不想做任何的數據轉換,直接從Redis里面取出一個對象, 那么使用RedisTemplate是更好的選擇。 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = SpringbootDatabaseApplication.class) public class TestRedis { //操作String @Autowired private StringRedisTemplate stringRedisTemplate; //操作對象 @Autowired private RedisTemplate redisTemplate; @Test public void testPutString() { stringRedisTemplate.opsForValue().set("testPutString", "123456"); } @Test public void tesGetString() { stringRedisTemplate.opsForValue().set("tesGetString", "123456"); String str = stringRedisTemplate.opsForValue().get("tesGetString"); Assert.assertEquals("123456", str); //設置緩存時間 stringRedisTemplate.opsForValue().set("tesGetString", "123456", 1000, TimeUnit.MILLISECONDS);//有效時間1s try { Thread.sleep(2000);//等待2s(等待設置為1s的時候后面可能取到值,redis的過期時間有延遲) } catch (InterruptedException e) { e.printStackTrace(); } str = stringRedisTemplate.opsForValue().get("tesGetString"); Assert.assertNull(str); } //注意:redisTemplate操作對象時對象需要實現序列化接口 @Test public void testObject() { Person person = generatePerson(); redisTemplate.opsForValue().set("testObject:" + person.getUsername(), person, 600); } @Test public void tesGetObject() { Person person = generatePerson(); redisTemplate.opsForValue().set("tesGetObject:" + person.getUsername(), person); Person cachePerson = (Person) redisTemplate.opsForValue().get("tesGetObject:" + person.getUsername()); Assert.assertEquals(person, cachePerson); } @Test public void tesDeleteCache() { stringRedisTemplate.opsForValue().set("tesDeleteCache", "123456"); String cacheStr = stringRedisTemplate.opsForValue().get("tesDeleteCache"); Assert.assertEquals("123456", cacheStr); stringRedisTemplate.delete("tesDeleteCache"); String DeleteStr = stringRedisTemplate.opsForValue().get("tesDeleteCache"); Assert.assertNull(DeleteStr); } //兩者操作互不影響 @Test public void testStrRedisTempAndRedisTemp(){ Person person = generatePerson(); //生成key為:xACxEDx00x05tx00x04test redisTemplate.opsForValue().set("testDiff", person); //生稱key為:test stringRedisTemplate.opsForValue().set("testDiff", "123456"); String cacheStr = stringRedisTemplate.opsForValue().get("testDiff"); Assert.assertEquals("123456", cacheStr); Person cachePerson = (Person) redisTemplate.opsForValue().get("testDiff"); Assert.assertEquals(person, cachePerson); } private Person generatePerson() { Person person = new Person(); person.setId(1L); person.setUsername("wangwu"); person.setPassword("123456"); return person; } }deploy
update.sql:數據庫sql文件
CREATE DATABASE springboot_database; USE springboot_database; DROP TABLE IF EXISTS `user` ; CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `mobile` varchar(20) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;pom.xml
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.projectlombok lombok org.springframework.boot spring-boot-starter-data-mongodb org.springframework.boot spring-boot-starter-redis 1.4.7.RELEASE org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1 mysql mysql-connector-java org.springframework.boot spring-boot-starter-data-jpa
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19114.html
摘要:作者重慶森林鏈接來源牛客網整個三月份通過牛客網和網友分享的經驗學到了很多東西,現在反饋一下我的面試經歷,希望對同學們有幫助。個人情況大三本方向渣碩,經過實驗室學長內推,于三月底完成面試。校招是實力和運氣的結合,缺一不可。 歡迎關注我的微信公眾號:Java面試通關手冊(堅持原創,分享美文,分享各種Java學習資源,面試題,以及企業級Java實戰項目回復關鍵字免費領?。簊howImg(h...
面試時7份靠能力,3份靠技能,而剛開始時的介紹項目又是技能中的重中之重,決定一次面試的成敗,那么面試時如果介紹自己的項目呢? 1、在面試前準備項目描述 別害怕,因為面試官什么都不知道,面試官是人,不是神,拿到你的簡歷的時候,是沒法核實你的項目細節的。更何況,你做的項目是以月為單位算的,而面試官最多用30分鐘來從你的簡歷上了解你的項目經驗,所以你對項目的熟悉程度要遠遠超過面試官,所以你一點也不用緊張...
面試時7份靠能力,3份靠技能,而剛開始時的介紹項目又是技能中的重中之重,決定一次面試的成敗,那么面試時如果介紹自己的項目呢? 1、在面試前準備項目描述 別害怕,因為面試官什么都不知道,面試官是人,不是神,拿到你的簡歷的時候,是沒法核實你的項目細節的。更何況,你做的項目是以月為單位算的,而面試官最多用30分鐘來從你的簡歷上了解你的項目經驗,所以你對項目的熟悉程度要遠遠超過面試官,所以你一點也不用緊張...
閱讀 3921·2021-11-17 09:33
閱讀 3283·2021-10-08 10:05
閱讀 3111·2021-09-22 15:36
閱讀 1140·2021-09-06 15:02
閱讀 2772·2019-08-29 12:45
閱讀 1590·2019-08-26 13:40
閱讀 3399·2019-08-26 13:37
閱讀 420·2019-08-26 13:37